多次重复AnimatorSet动画

时间:2015-02-11 12:19:09

标签: android android-animation

我已经尝试了几个小时,我觉得现在是时候放弃了。 如何循环xml中定义的AnimatorSet?

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <objectAnimator />

    <objectAnimator />

    <objectAnimator />

    <objectAnimator />

</set>

我在单个startOffset上尝试了repeatCountdurationobjectAnimator的几十种组合,但这不是正确的方法。

我读到了this有希望的解决方法:

a.addListener(new AnimatorListenerAdapter() {

    @Override
    public void onAnimationEnd(Animator animation) {
        animation.start();
        Log.i();
    }
});

但它不起作用:onAnimationEnd被调用一次,动画被重复,然后onAnimationEnd不再被调用。

此处的其他类似问题涉及错误答案(参考android.view.animation框架)或建议为单个objectAnimator定义自定义插值器,但这不是我真正的问题。寻找。谢谢。

3 个答案:

答案 0 :(得分:4)

我遇到了与AnimatorSet一起播放两个动画的问题。

我使用animationSet.play(anim1).with(anim2)创建了该集,这导致我的动画只重复一次。

将其更改为animationSet.play(anim1).with(anim2).after(0)解决了我的问题并允许动画无限循环。

似乎有一个错误会强制您在动画可以循环多次之前在动画中至少有一个连续步骤。

答案 1 :(得分:2)

我遇到了绝对相同的情况。经过近一天的审判,我突然怀疑动画师应该在主线上开始。它有效。

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

目前我不知道为什么。

答案 2 :(得分:0)

当您将动画重新启动为递归时,您不会向动画添加侦听器。您需要创建一个AnimatorListenerAdapter对象,然后重复使用它。

希望我对你有所帮助!