Как поделиться объектом для всех действий приложения

#java #android #singleton #android-animation #android-button

#java #Android #синглтон #android-анимация #android-кнопка

Вопрос:

У меня есть анимация, которую я хочу применить к каждой кнопке в моем приложении. Поэтому я не хочу вызывать AnimationUtils.loadAnimation() в каждом методе activity onCreate. Я хотел бы вызвать этот метод только один раз, когда приложение запускается для инициализации моего объекта анимации, а затем получить его (с помощью геттера) в моих различных действиях. Я новичок в программировании на Android, я планировал использовать одноэлементный шаблон, но он выглядит как «небезопасный» в Android, связанный с этой статьей и другими страницами Stackoverflow. (https://programmerr47.medium.com/singletons-in-android-63ddf972a7e7 )

Есть ли способ создать мою анимацию при запуске приложения и поделиться ею между каждым действием? И стоит ли проводить некоторую оптимизацию?

Ответ №1:

Я бы предложил расширить android Button / AppCompatButton class, добавив нужную функциональность в расширенный класс и используя эту кнопку везде в вашем приложении, что намного проще и, вероятно, наиболее правильным способом,

Например:

AnimatedButton.java:

 package com.example.myapplication;

import android.content.Context;
import android.util.AttributeSet;

public class AnimatedButton extends androidx.appcompat.widget.AppCompatButton {
    public AnimatedButton(Context context) {
        super(context);
        createAnimation();
    }

    public AnimatedButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AnimatedButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    private void createAnimation() {
        // here create the animation and call
        // setAnimation([YOUR_ANIMATION_HERE]);
        // now you can simply call customButton.animate();
        // from anywhere in the code that uses the button and it should work
    }
}
 

В вашем XML-файле, где вы хотите использовать кнопку:

 <com.example.myapplication.AnimatedButton
            android:id="@ id/btn_animate"
            android:layout_width="180dp"
            android:layout_height="80dp"
            android:text="Animate" />
 

Комментарии:

1. Рад помочь. Пожалуйста, дайте положительный ответ и отметьте вопрос как решенный, если это так. Счастливого кодирования.