我有三个buttons
,我想让它们在点击"开始"后随机改变颜色。按钮。我的问题是,我无法让动画一个接一个地显示出来,最终会在彼此之上运行。
我知道我必须使用animationListiner()
,但我并不完全理解它,也无法让它发挥作用。
private void startColorAnimation(View v) {
for(int i =0; i<10;i++) {
final int min = 0;
final int max = 2;
final int random = rnd.nextInt((max - min) + 1) + min;
if(random == 0){
animStart = 0xFFFF0000;
animEnd = 0xFF990000;
colorAnim = ObjectAnimator.ofInt(redButton, "backgroundColor", animStart, animEnd );
}else if(random ==1){
animStart = 0xFF3366FF;
animEnd = 0xFF000099;
colorAnim = ObjectAnimator.ofInt(blueButton, "backgroundColor", animStart, animEnd );
}else if(random==2){
animStart = 0xFF009900;
animEnd = 0xFF66CC00;
colorAnim = ObjectAnimator.ofInt(greenButton, "backgroundColor", animStart, animEnd );
}
colorAnim.setDuration(500);
colorAnim.setEvaluator(new ArgbEvaluator());
colorAnim.setRepeatCount(0);
colorAnim.start();
}
}
任何形式的帮助将不胜感激。
答案 0 :(得分:1)
看起来你打算在三个按钮上随机分布10个动画。
由于动画设置为500毫秒的持续时间,您需要将给定按钮的下一个动画延迟至少500毫秒。
我能想到实现这一目标的唯一方法是跟踪待处理/正在运行的动画,并使用Handler.postDelayed(Runnable,delay)来实际运行动画。
protected void randomizeTheButton(int animCount)
{
int delay = 0;
for(int i = 0; i < animCount; i++)
{
final ObjectAnimator colorAnim = ObjectAnimator.ofArgb(mButton, "backgroundColor", Color.argb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)));
colorAnim.setDuration(500);
colorAnim.setEvaluator(new ArgbEvaluator());
colorAnim.setRepeatCount(0);
mHandler.postDelayed(new Runnable()
{
@Override
public void run()
{
colorAnim.start();
}
}, delay);
delay += colorAnim.getDuration();
}
}
通过在按钮的单击侦听器中调用此方法,您将获得以下行为。你需要比我在这里展示的更进一步,以便你可以实际运行不同按钮的不同动画。