我正在尝试生成随机颜色并将其设置为 3 秒的背景。我已经创建了一个thread
可以处理这种变化的方法,现在我想在颜色变化之间添加一个过渡以使其很好地融合。
作为参考,看看这个应用程序。
编辑:我尝试过ObjectAnimator
在ArgbEvaluator
一个循环中使用 3 秒的过渡期,但屏幕一直以类似频闪的方式闪烁,这只会让你头疼。除此之外,颜色变化很好,其他一切都很完美。有人可以运行它,看看可能出了什么问题吗?
public class Main extends Activity {
public int color1, color2, red1, red2, blue1, blue2, green1, green2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
new Thread() {
public void run() {
while(true) {
try {
Thread.sleep(3000); // I've also tried 1000 and 4000, same issue.
} catch (InterruptedException e) {
e.printStackTrace();
}
Main.this.runOnUiThread(new Runnable() {
public void run() {
//generate color 1
red1 = (int)(Math.random() * 128 + 127);
green1 = (int)(Math.random() * 128 + 127);
blue1 = (int)(Math.random() * 128 + 127);
color1 = 0xff << 24 | (red1 << 16) |
(green1 << 8) | blue1;
//generate color 2
red2 = (int)(Math.random() * 128 + 127);
green2 = (int)(Math.random() * 128 + 127);
blue2 = (int)(Math.random() * 128 + 127);
color2 = 0xff << 24 | (red2 << 16) |
(green2 << 8) | blue2;
//start animation
View v = findViewById(R.id.view);
ObjectAnimator anim = ObjectAnimator.ofInt(v, "backgroundColor", color1, color2);
anim.setEvaluator(new ArgbEvaluator());
anim.setRepeatCount(ValueAnimator.INFINITE);
anim.setRepeatMode(ValueAnimator.REVERSE);
anim.setDuration(3000);
anim.start();
}
});
}
}
}.start();
}
}
编辑:我缩小了范围,发现“.setRepeatMode”导致了问题。我仍然没有修复。通过将“反向”更改为其他内容(无限或其他提供的选项),它可以防止动画发生。知道我能做些什么来解决这个问题吗?
另外,有人知道产生更鲜艳色彩的更好方法吗?我查看的所有内容都已过时。