我需要的是一个无限可重复的AnimatorSet
(由2个顺序animations
组成),但也是一种以安全的方式阻止这些animations
的方法(即最终状态与开始状态)。例如,通过点击屏幕就会发生停止。
我遇到的主要问题是当我尝试通过调用animatorSet.end()
或cancel()
来停止时,动画正在中途停止或完成第一个动画(因此不会返回到原始状态)。 / p>
我找到了一个解决方案,它实际上是SO上发现的许多不同解决方案的混合。
重要提示:两个连续的动画一起创建一个优雅的循环,这样animation1
向右慢慢地button
,而animation2
则更快地向左返回它。这就是为什么我需要优雅地结束停止,以便它完成animation1
和animation2
,无论状态是什么时候我想要停止它。
答案 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()
。
这实际上是有道理的:一旦我删除了listener
,animatorSet
将完成当前的animations
,然后因为listener
而无法再次启动它重复的消失了。
希望它有所帮助!