我需要的是无限可重复的AnimatorSet
(由2个连续的animations
组成),而且是一种以安全的方式停止这些animations
的方法(即最终状态与开始状态相同)。例如,通过点击屏幕即可停止。
我遇到的主要问题是,当我尝试通过调用animatorSet.end()
或cancel()
停止播放时,动画正在中途停止或结束了第一个动画(因此未返回原始状态)。
我找到了一个解决方案,它实际上是在SO上找到的许多不同解决方案的组合。
重要说明:两个连续的动画一起创建了一个优美的循环,以使animation1
缓慢地将button
移至右侧,而animation2
则将其快速移至左侧。这就是为什么我需要停止以优雅的方式结束,以使其完成animation1
和animation2
的原因,无论我要停止它的状态如何。
最佳答案
要创建可重复的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()
。这实际上是有道理的:一旦删除
listener
,animatorSet
将完成当前的animations
,然后将无法重新启动它,因为重复的listener
已经消失了。希望它能对某人有所帮助!
关于android - Android AnimatorSet重复然后取消,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46756452/