设置重复动画的开始偏移仅用于开始

问题描述 投票:0回答:2

我想延迟一些动画的开始。因此,当动画不重复时,我们可以轻松使用

startOffset
属性。问题是我有一个将无限重复的动画。但我必须延迟启动它,所以当我使用
startOffset
时,动画总是以延迟重复,这不是我想要的。另外,我不想使用
Handler
来造成延迟。

编辑:

我从未使用过ObjectAnimator。我的代码如下所示,但它没有动画。我的错误是什么?

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "translationX", 1000, -1000);
objectAnimator.setDuration(ANIMATION_DURATION);
objectAnimator.setRepeatMode(ValueAnimator.RESTART);
objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
objectAnimator.setStartDelay((5 - i) * INTERVAL);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(objectAnimator);
animatorSet.start();
android android-animation
2个回答
2
投票

如果您在 res/drawable 文件夹中的 XML 文件中使用 VectorDrawable 和 AnimatedVectorDrawable 并在 res/animator 文件夹中的 objectAnimator 文件中定义动画,则 startOffset 延迟仅在第一次时起作用,而在重复期间不起作用。重复是立即的。另一方面,如果您希望动画每次重复时都以延迟开始,那么我相信 onAnimationEnd 重置是有效的。


0
投票

您可以向您的

objectAnimator
添加侦听器,并在侦听器的
onAnimationRepeat
中调用
objectAnimator.setStartDelay(0)
。代码如下:

objectAnimator.addListener(new Animator.AnimatorListener() {

    // ...

    @Override
    public void onAnimationRepeat(@NonNull Animator animation) {
        objectAnimator.setStartDelay(0);
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.