我需要的是无限可重复的AnimatorSet(由2个连续的animations组成),而且是一种以安全的方式停止这些animations的方法(即最终状态与开始状态相同)。例如,通过点击屏幕即可停止。

我遇到的主要问题是,当我尝试通过调用animatorSet.end()cancel()停止播放时,动画正在中途停止或结束了第一个动画(因此未返回原始状态)。

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

重要说明:两个连续的动画一起创建了一个优美的循环,以使animation1缓慢地将button移至右侧,而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或需要监听的任何方法来停止animation(请记住,必须可以访问animatorSet,使其成为一个字段)。

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


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

希望它能对某人有所帮助!

关于android - Android AnimatorSet重复然后取消,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46756452/

10-10 07:09