因此,我使用 ValueAnimator 将火柴人的四肢以无限循环的方式从一个位置移动到另一个位置,或者至少直到动画停止。我的问题是,当动画师重复时,我会稍微停顿,就好像动画滞后一样,但只有当动画重复时才会发生这种情况。我还有其他动画只发生一次,并且运行得非常流畅,而且它们每次都有同样多的计算,所以我目前认为这是 ValueAnimator 的问题。
过去我能够找到其他人抱怨这个问题,但我找不到任何人找到解决方案。你们知道这是否是 Android ValueAnimator 的真正问题吗?如果是这样,您知道有什么解决方案吗?如果没有,你们知道为什么这种情况会发生在动画中的那个地方吗?我真的被这个困住了。
我的 ValueAnimator 设置代码是这样的:
mFigureAnimator = ValueAnimator.ofFloat(0f, 1f);
mFigureAnimator.setInterpolator(new LinearInterpolator());
mFigureAnimator.setDuration(1000);
mFigureAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
Float delta = (Float)animation.getAnimatedValue();
// Set the drawn locations based on the animated time and the start/end
invalidate();
}
});
mFigureAnimator.setRepeatCount(ValueAnimator.INFINITE);
mFigureAnimator.setRepeatMode(ValueAnimator.RESTART);
mFigureAnimator.start();
对于动画,您可以将插值器配置为线性插值器在动画文件中:
android:interpolator="@android:anim/linear_interpolator"
对于动画师来说,线性插值器也适合我,我有一个旋转动画师,进行 360 度旋转并无限重复:
public class RotateAnimator {
private float mDegrees;
private ObjectAnimator mAnim;
private RotateAnimator() {
mAnim = ObjectAnimator.ofFloat(this, "degrees", 360);
mAnim.setInterpolator(new LinearInterpolator());
mAnim.setRepeatCount(ValueAnimator.INFINITE);
mAnim.setRepeatMode(ValueAnimator.INFINITE);
mAnim.setEvaluator(new FloatEvaluator());
mAnim.setDuration(2000);
mAnim.start();
}
public float getDegrees() {
return mDegrees;
}
public void setDegrees(float degrees) {
this.mDegrees = degrees;
// invalidate the view so it can redraw itself
invalidate();
}
}
这样就解决了我的问题,如果您找不到其他解决方案,希望这可以帮助您,祝您好运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)