Android内外两难选择

时间:2016-07-13 08:30:19

标签: android class

我发现自己处于一个奇怪的境地,我一直试图解决几个小时。

这是我的Main Activity java文件中的布尔方法

public boolean AutoSlowColorChange(boolean SlowOn) {

    if (SlowOn) {

        final Random rand = new Random();
        final Handler handler = new Handler();

        Runnable r = new Runnable() {

            public void run() {
                int Changecolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));

                ObjectAnimator ChangecolorFade = ObjectAnimator.ofObject(screen, "backgroundColor", new ArgbEvaluator(),
                        Color.argb(Changecolor, Changecolor, Changecolor, Changecolor), Changecolor);
                //slow change
                ChangecolorFade.setDuration(2000);
                ChangecolorFade.start();


                ChangecolorFade.setRepeatCount(ValueAnimator.INFINITE);
                ChangecolorFade.setRepeatMode(ValueAnimator.REVERSE);

                int value = rand.nextInt(10);
                handler.postDelayed(this, 4000);


            }
        };

        handler.postDelayed(r, 1000);
    } else {
        ChangecolorFade.end();
        ChangecolorFade.cancel();
    }

        return SlowOn;

}

我试图阻止else语句中的ObjectAnimator

} else {
    ChangecolorFade.end();
    ChangecolorFade.cancel();
} 

无法访问它,因为它位于Runnable()内部,现在如果我将ObjectAnimator放在方法的开头,那么它将被Runnable和else语句读取

 public boolean AutoSlowColorChange(boolean SlowOn) {
            int Changecolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
        ObjectAnimator ChangecolorFade = ObjectAnimator.ofObject(screen, "backgroundColor", new ArgbEvaluator(),
                Color.argb(Changecolor, Changecolor, Changecolor, Changecolor), Changecolor);

我必须将其声明为最终

public boolean AutoSlowColorChange(boolean SlowOn) {
            int Changecolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
        final ObjectAnimator ChangecolorFade = ObjectAnimator.ofObject(screen, "backgroundColor", new ArgbEvaluator(),
                Color.argb(Changecolor, Changecolor, Changecolor, Changecolor), Changecolor); 

如果我将其声明为final,它将由Runnable()和else语句读取,但因为它是final,我无法随机更改颜色

我还尝试将Changecolor int放在public main方法中,但没有运气。如果我在

下创建另一个ObjectAnimator
public boolean AutoSlowColorChange(boolean SlowOn) {
ObjectAnimator ChangecolorFade2 = ObjectAnimator.ofObject(screen, "backgroundColor", new ArgbEvaluator(),
        Color.argb(Changecolor, Changecolor, Changecolor, Changecolor), Changecolor);

无法停止当前动画的运行。

有没有人对我所处的这种困境有任何想法? 谢谢:))

1 个答案:

答案 0 :(得分:0)

声明你的动画师决赛不会让它变得不可变。如果我做对了,您可以随时使用ObjectAnimator的setObjectValues(Object ... values)方法更新颜色值。

或者,似乎可以在创建对象动画制作者之后改变Changecolor。