我已经试了好几个小时了,我觉得是时候放弃了。如何循环用xml定义的AnimatorSet?
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator />
<objectAnimator />
<objectAnimator />
<objectAnimator />
</set>我尝试了几十种startOffset、repeatCount和duration在单一objectAnimator上的组合,但这并不是正确的方法。
我读到了关于这有前途的解决办法的文章:
a.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
animation.start();
Log.i();
}
});但是它不起作用:onAnimationEnd只被一次调用,动画被重复,然后onAnimationEnd不再被调用。
这里的其他类似问题涉及错误的答案(引用android.view.animation框架),或者建议为单个objectAnimator定义自定义内插器,但这并不是我想要的。谢谢。
发布于 2015-09-03 16:08:49
我和一个同时播放两个动画的AnimatorSet也有同样的问题。
我用animationSet.play(anim1).with(anim2)创建了这个集,结果我的动画只重复了一次。
将其更改为animationSet.play(anim1).with(anim2).after(0)解决了我的问题,并允许动画无限期地循环。
似乎有一个bug迫使你在动画中至少有一个连续的步骤,然后动画才能循环不止一次。
发布于 2015-12-16 12:06:56
我遇到了完全相同的情况。经过近一天的试验,我突然怀疑动画师应该在主线程上启动。而且它是有效的。
mRandomPointAnimatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
Log.i(TAG, "onAnimationStart");
mRandomPointView.setVisibility(VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
Log.i(TAG, "onAnimationEnd");
mRandomPointView.setVisibility(INVISIBLE);
mHandler.post(new Runnable() {
@Override
public void run() {
if (isShown()) {
requestLayout();
mRandomPointAnimatorSet.start();
}
}
});
}
});我不知道为什么。
发布于 2015-02-11 12:27:32
当您以递归方式重新启动动画时,您不会将侦听器添加到动画中。您需要创建一个AnimatorListenerAdapter对象并重用它。
希望我对你说得有道理!
https://stackoverflow.com/questions/28454208
复制相似问题