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

Chr*_*s D 28 animation android

好吧,我有一个活动,我有多个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);
}
Run Code Online (Sandbox Code Playgroud)

Gri*_*ace 35

我假设fadeout和fadein都是Animation对象.

用于fadeout.hasEnded()在开始第二个之前检查第一个是否已完成.

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

  • @Kunu,将条件更改为`if(!animation.hasStarted()|| animation.hasEnded())`并且事情应该有效. (12认同)
  • 当动画尚未运行时会发生什么,因此不会返回错误结果,从而取消动画.我会试一试,但这是我想到的第一个想法.谢谢你的帮助. (5认同)

小智 5

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

// 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);

}
Run Code Online (Sandbox Code Playgroud)

使用这种解决方案,您无需主动检查动画是否已完成并使用前一个动画的持续时间对其计时。

onAnimationEnd(Animation) 在动画结束后立即触发。这也解决了用户将开发者选项设置为“开”和动画速度设置为“关”的问题。