Android ValueAnimator делает паузу во время повтора
Поэтому я использую 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();
1 ответ
Для анимации вы можете настроить интерполятор как LinearInterpolator в файле анимации:
android:interpolator="@android:anim/linear_interpolator"
для Аниматора LinearInterpolator также работает для меня, у меня был вращатель аниматора, сделать вращение на 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();
}
}
таким образом я решил мою проблему, если вы не можете найти другое решение, надеюсь, это поможет вам, удачи.