多次重复一个 AnimatorSet 动画
Repeating an AnimatorSet animation multiple times
我已经尝试了几个小时,我觉得是时候放弃了。
如何循环 xml 中定义的 AnimatorSet?
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator />
<objectAnimator />
<objectAnimator />
<objectAnimator />
</set>
我在单个 objectAnimator
上尝试了 startOffset
、repeatCount
和 duration
的数十种组合,但那不是正确的方法。
我读到 this 有前途的解决方法:
a.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
animation.start();
Log.i();
}
});
但它不起作用:onAnimationEnd
被调用一次,动画重复,然后 onAnimationEnd
不再被调用。
这里的其他类似问题涉及错误答案(指的是 android.view.animation
框架)或建议为单个 objectAnimator
定义自定义插值器,但这并不是我真正想要的。谢谢。
当您以递归方式重新启动动画时,您没有向动画添加侦听器。您需要创建一个 AnimatorListenerAdapter 对象,然后重新使用它。
希望我对您有所帮助!
我在同时播放两个动画的 AnimatorSet
上遇到了同样的问题。
我用 animationSet.play(anim1).with(anim2)
创建了集,这导致我的动画只重复一次。
将其更改为 animationSet.play(anim1).with(anim2).after(0)
解决了我的问题并允许动画无限循环。
似乎存在一个错误,强制您在动画循环不止一次之前必须在动画中至少有一个顺序步骤。
我遇到完全一样的情况。经过将近一天的试用,我突然怀疑动画师应该在主线程上启动。并且有效。
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();
}
}
});
}
});
目前不知道为什么。
我已经尝试了几个小时,我觉得是时候放弃了。 如何循环 xml 中定义的 AnimatorSet?
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator />
<objectAnimator />
<objectAnimator />
<objectAnimator />
</set>
我在单个 objectAnimator
上尝试了 startOffset
、repeatCount
和 duration
的数十种组合,但那不是正确的方法。
我读到 this 有前途的解决方法:
a.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
animation.start();
Log.i();
}
});
但它不起作用:onAnimationEnd
被调用一次,动画重复,然后 onAnimationEnd
不再被调用。
这里的其他类似问题涉及错误答案(指的是 android.view.animation
框架)或建议为单个 objectAnimator
定义自定义插值器,但这并不是我真正想要的。谢谢。
当您以递归方式重新启动动画时,您没有向动画添加侦听器。您需要创建一个 AnimatorListenerAdapter 对象,然后重新使用它。
希望我对您有所帮助!
我在同时播放两个动画的 AnimatorSet
上遇到了同样的问题。
我用 animationSet.play(anim1).with(anim2)
创建了集,这导致我的动画只重复一次。
将其更改为 animationSet.play(anim1).with(anim2).after(0)
解决了我的问题并允许动画无限循环。
似乎存在一个错误,强制您在动画循环不止一次之前必须在动画中至少有一个顺序步骤。
我遇到完全一样的情况。经过将近一天的试用,我突然怀疑动画师应该在主线程上启动。并且有效。
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();
}
}
});
}
});
目前不知道为什么。