Я пытаюсь создать случайный цвет и установить его как фон со скоростью 3 секунды. Я создал thread
, который будет обрабатывать это изменение, теперь я хотел бы добавить переход между изменениями цвета, чтобы он хорошо сочетался.Динамическое изменение цвета фона с анимированным переходом
В качестве справки, взгляните на this app.
EDIT: Я попытался с помощью 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();
}
}
EDIT: Я сузил и нашел ".setRepeatMode" вызывают проблемы. У меня все еще нет исправления. Изменяя «Реверс» на что-то еще (бесконечные или другие предоставленные опции), это предотвращает анимацию. Любая идея, что я могу сделать, чтобы исправить это?
ТАКЖЕ, знает ли кто-нибудь лучший способ генерации более ярких цветов? Все, что я искал, устарело.
Что происходит, когда вы запускаете этот код? – Prmths
Эта нить плюс реверсирование анимации не будет слишком хорошо. Посмотрите на это и посмотрите, хотите ли вы https://gist.github.com/luksprog/6673439. – Luksprog