如何为所有应用程序的活动共享对象

qq24tv8q  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(332)

我有一个动画,我想适用于我的应用程序中的每个按钮。所以我不想在每个activity oncreate方法中调用animationutils.loadanimation()。我只想在应用程序启动时调用此方法一次,以初始化我的动画对象,然后在我的不同活动中获取它(使用getter)。我是android编程的新手,我本来打算使用单例模式,但是在android中,它看起来像是“不安全的”,与本文和其他stackoverflow页面相关(https://programmerr47.medium.com/singletons-in-android-63ddf972a7e7)
有没有在应用程序启动时创建动画并在每个活动之间共享?做一些优化值得吗?

knpiaxh1

knpiaxh11#

我建议扩展安卓系统 Button / AppCompatButton 类,将您想要的功能添加到扩展类中,并在应用程序中的任何地方使用该按钮,这种方式可能更简单,也可能是最正确的方式,
例如:
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" />

相关问题