动画延迟android

时间:2015-11-24 21:43:36

标签: java android animation

我有三个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();
        }
    }

任何形式的帮助将不胜感激。

1 个答案:

答案 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();
    }
}

通过在按钮的单击侦听器中调用此方法,您将获得以下行为。你需要比我在这里展示的更进一步,以便你可以实际运行不同按钮的不同动画。

animation example