Android AnimatorSet重复然后取消

问题描述:

我需要的是一个无限可重复的AnimatorSet(由两个连续的animations组成),但也是一种安全地停止这些animations(即最终状态与起始状态相同)的方法。例如通过在屏幕上点击来停止。Android AnimatorSet重复然后取消

主要问题,我是当我试图通过调用animatorSet.end()cancel(),动画被停止或者中途或完成第一动画的(因此没有返回到原来的状态)停止。

我找到了一个解决方案,这个解决方案实际上是在SO上找到的许多不同解决方案的组合。

重要提示:两个连续的动画一起创建一个优美的循环,这样animation1缓慢地向右取0123,,而animation2更快地返回到左侧。这就是为什么我需要停止优雅地结束,以便它完成animation1animation2,无论状态是什么时候我想停止它。

要创建一个可重复AnimatorSet

animatorSet = new AnimatorSet(); 
animatorSet.play(animation1).after(animation2); 

animatorSet.addListener(new AnimatorListenerAdapter() { 
      boolean isCancelled; 

      @Override 
      public void onAnimationEnd(Animator animation) { 
       if (!isCancelled) { 
        animatorSet.start(); 
       } 
      } 

      @Override 
      public void onAnimationCancel(Animator animation) { 
       this.isCancelled = true; 
      } 
     }); 

animatorSet.start(); 

现在下面的方法stopAnimation()你想从你的onClickListener或任何你需要监听到记animatorSet停止animation(熊呼叫必须访问,例如使它成为一个领域)。

public void stopAnimation(Context context){ 
     guideAnimationSet.removeAllListeners(); 

最后,我并不需要任何cancel()end()。 这实际上是有道理的:一旦我删除listeneranimatorSet将完成当前animations,然后将不能再次启动它,因为listener重复已消失。

希望它可以帮助别人!