多次重复一个 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 上尝试了 startOffsetrepeatCountduration 的数十种组合,但那不是正确的方法。

我读到 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();
                    }
                }
            });
        }
    });

目前不知道为什么。