如何在开始新动画之前检查动画是否正在运行?

时间:2012-03-30 03:05:41

标签: android animation

我有一个活动,我有多个ImageViews,当你点击它时,ImageView将淡出并淡入。我想弄清楚的是我如何点击一个ImageView并启动动画,当我单击第二个,动画仍在运行,它将忽略第二个。我想我需要对animationListener做一些事情,但是在我发起新动画之前,我无法弄清楚如何使用它来检查动画是否正在运行。我本来可以发誓我看到了一个这样做的例子,但我已经找了几天而又找不到它了,我希望有人能够在这里帮忙.....下面是我的代码动画:

// Create Animation
protected void fadeAnimation() {
    tempImg.startAnimation(fadeout);
    //Allow animation to finish
    mHandler.postDelayed(new Runnable() {
        public void run() {
        tempImg.startAnimation(fadein);
        }
    }, 1000);
}

2 个答案:

答案 0 :(得分:35)

我假设fadeout和fadein都是Animation个对象。

使用fadeout.hasEnded()检查第一个是否已完成,然后再开始第二个。

有关Animation课程的更多详情,请参阅此处: http://developer.android.com/reference/android/view/animation/Animation.html

答案 1 :(得分:3)

不必在另一个线程中循环检查动画是否已经结束,您可以使用动画侦听器,执行以下操作:

// Create Animation
protected void fadeAnimation() {
   fadeout.setAnimationListener(new Animation.AnimationListener(){
         @Override
         public void onAnimationStart(Animation animation) {

         }
         @Override
         public void onAnimationEnd(Animation animation) {
              tempImg.startAnimation(fadein);
         }             
         @Override
         public void onAnimationRepeat(Animation animation) {

         }

   };
   tempImg.startAnimation(fadeout);

}

使用这种解决方案,您不需要主动检查动画是否已完成,并在上一个动画的持续时间内对其进行计时。

动画结束后立即触发onAnimationEnd(动画)。这也解决了具有开发者选项的用户问题" on"并将动画速度设置为" off"。