Android 具有恒定速度的 ObjectAnimator
Android ObjectAnimator with constant speed
我使用 ObjectAnimator 将视图从 0 度旋转到 360 度。但是旋转的速度不是恒定的。我需要一个恒定的速度,因为动画应该重复几次。速度的任何加速都会扰乱动画的一致性。这是我的代码:
ObjectAnimator animRotate = ObjectAnimator.ofFloat(ivLoader,"rotation", 0,360);
animRotate.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
animRotate.start();
}
});
animRotate.start();
查看 Interpolator class,ValueAnimator
的默认值(ObjectAnimator
正在扩展它)是:
private static final TimeInterpolator sDefaultInterpolator =
new AccelerateDecelerateInterpolator();
它会在"starting phase"期间加速并在结束时减速。你想要线性插值所以:
ObjectAnimator animRotate = ...
animRotate.setInterpolator(new LinearInterpolator());
animRotate.addListener(... // rest of code
但考虑将 AnimatorListener
替换为
animRotate.setRepeatMode(ValueAnimator.INFINITE);
还有setRepeatCount
方法
我使用 ObjectAnimator 将视图从 0 度旋转到 360 度。但是旋转的速度不是恒定的。我需要一个恒定的速度,因为动画应该重复几次。速度的任何加速都会扰乱动画的一致性。这是我的代码:
ObjectAnimator animRotate = ObjectAnimator.ofFloat(ivLoader,"rotation", 0,360);
animRotate.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
animRotate.start();
}
});
animRotate.start();
查看 Interpolator class,ValueAnimator
的默认值(ObjectAnimator
正在扩展它)是:
private static final TimeInterpolator sDefaultInterpolator =
new AccelerateDecelerateInterpolator();
它会在"starting phase"期间加速并在结束时减速。你想要线性插值所以:
ObjectAnimator animRotate = ...
animRotate.setInterpolator(new LinearInterpolator());
animRotate.addListener(... // rest of code
但考虑将 AnimatorListener
替换为
animRotate.setRepeatMode(ValueAnimator.INFINITE);
还有setRepeatCount
方法