我想延迟一些动画的开始。因此,当动画不重复时,我们可以轻松使用
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();
如果您在 res/drawable 文件夹中的 XML 文件中使用 VectorDrawable 和 AnimatedVectorDrawable 并在 res/animator 文件夹中的 objectAnimator 文件中定义动画,则 startOffset 延迟仅在第一次时起作用,而在重复期间不起作用。重复是立即的。另一方面,如果您希望动画每次重复时都以延迟开始,那么我相信 onAnimationEnd 重置是有效的。
您可以向您的
objectAnimator
添加侦听器,并在侦听器的 onAnimationRepeat
中调用 objectAnimator.setStartDelay(0)
。代码如下:
objectAnimator.addListener(new Animator.AnimatorListener() {
// ...
@Override
public void onAnimationRepeat(@NonNull Animator animation) {
objectAnimator.setStartDelay(0);
}
});