Android AnimatorSet重复然后取消

时间:2017-10-15 15:02:24

标签: android android-animation

我需要的是一个无限可重复的AnimatorSet(由2个顺序animations组成),但也是一种以安全的方式阻止这些animations的方法(即最终状态与开始状态)。例如,通过点击屏幕就会发生停止。

我遇到的主要问题是当我尝试通过调用animatorSet.end()cancel()来停止时,动画正在中途停止或完成第一个动画(因此不会返回到原始状态)。 / p>

我找到了一个解决方案,它实际上是SO上发现的许多不同解决方案的混合。

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

1 个答案:

答案 0 :(得分:1)

创建可重复的 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或者您需要收听的任何内容animation(请记住animatorSet必须可访问,使它成为一个领域,例如)。

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

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

希望它有所帮助!