Android AnimatorSet重复然后取消
问题描述:
我需要的是一个无限可重复的AnimatorSet
(由两个连续的animations
组成),但也是一种安全地停止这些animations
(即最终状态与起始状态相同)的方法。例如通过在屏幕上点击来停止。Android AnimatorSet重复然后取消
主要问题,我是当我试图通过调用animatorSet.end()
或cancel()
,动画被停止或者中途或完成第一动画的(因此没有返回到原来的状态)停止。
我找到了一个解决方案,这个解决方案实际上是在SO上找到的许多不同解决方案的组合。
重要提示:两个连续的动画一起创建一个优美的循环,这样animation1
缓慢地向右取0123,,而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
或任何你需要监听到记animatorSet
停止animation
(熊呼叫必须访问,例如使它成为一个领域)。
public void stopAnimation(Context context){
guideAnimationSet.removeAllListeners();
最后,我并不需要任何cancel()
或end()
。 这实际上是有道理的:一旦我删除listener
,animatorSet
将完成当前animations
,然后将不能再次启动它,因为listener
重复已消失。
希望它可以帮助别人!