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

问题描述 投票:28回答:2

我有一个活动,我有多个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);
}
android animation
2个回答
35
投票

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

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

有关Animation类的更多详细信息,请参见:http://developer.android.com/reference/android/view/animation/Animation.html


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”的用户的问题。

© www.soinside.com 2019 - 2024. All rights reserved.