重复AnimatorSet

有没有一种简单的方法来重复Android AnimatorSet (无限)? 我可以通过再次调用start()设置AnimationListener并重新启动AnimatorSet吗?

我的AnimatorSet包含两个按顺序播放的animation。 因此,如果我将两个单个animation的重复模式设置为重复,那么第二个animation的重复模式将在第二个运行时重复,对吧?

设置它的子对象animation师的重复模式和计数;

 objectAnimator.setRepeatCount(ObjectAnimator.INFINITE); objectAnimator.setRepeatMode(ObjectAnimator.RESTART/REVERSE...); 

但是,由于还有另一个错误,这将无法停止或取消。

很明显,我并不喜欢你可以在Android中制作animation的各种方式,并让它们以某种方式让你失败。 希望这有助于其他人。

前两个问题有答案

有没有一种简单的方法来重复Android AnimatorSet(无限)? 我可以通过再次调用start()来设置AnimationListener并重新启动animatorSet吗?

就在这里:

 mAnimationSet.addListener(new AnimatorListenerAdapter() { private boolean mCanceled; @Override public void onAnimationStart(Animator animation) { mCanceled = false; } @Override public void onAnimationCancel(Animator animation) { mCanceled = true; } @Override public void onAnimationEnd(Animator animation) { if (!mCanceled) { animation.start(); } } }); mAnimationSet.start(); 

第三个问题的答案是否定的。 将重复第一个animation,并且在所有重复之后将启动后续animation。

在我的脑海中 – animation框架是痛苦的源泉,特别是如果你想支持2.x. 我经常遇到集合试图使用AnimationListenertypes的“播放器”做任何更复杂的跟踪。 我跟踪我播放的animation(如int等)然后on onAnimationEnd我开始另一个应该按顺序播放。 这样我就可以轻松地“编写”我的序列,并且不会打扰破坏的框架。

因此,上述选项都不合适。

如果您使用:

  @Override public void onAnimationEnd(Animator animation) { if (!mCanceled) { animation.start(); } } 

你有时会得到stackOverFlowexception。

最好的事情是做一些事情:

 Thread t = new Thread(new Runnable() { @Override public void run() { while (true && getActivity() != null) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { set3.start(); } }); SystemClock.sleep(1200); } } }); t.start(); 

这个怎么样?

 @Override public void onAnimationEnd(Animator animation) { if (!mCanceled) { animation.reset(); //<- added. animation.start(); } }