我发现自己处于一个奇怪的境地,我一直试图解决几个小时。
这是我的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方法中,但没有运气。如果我在
下创建另一个ObjectAnimatorpublic boolean AutoSlowColorChange(boolean SlowOn) {
ObjectAnimator ChangecolorFade2 = ObjectAnimator.ofObject(screen, "backgroundColor", new ArgbEvaluator(),
Color.argb(Changecolor, Changecolor, Changecolor, Changecolor), Changecolor);
无法停止当前动画的运行。
有没有人对我所处的这种困境有任何想法? 谢谢:))
答案 0 :(得分:0)
声明你的动画师决赛不会让它变得不可变。如果我做对了,您可以随时使用ObjectAnimator的setObjectValues(Object ... values)方法更新颜色值。
或者,似乎可以在创建对象动画制作者之后改变Changecolor。