Intereting Posts

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(); 

Для анимации вы можете настроить интерполятор как LinearInterpolator в файле анимации:

 android:interpolator="@android:anim/linear_interpolator" 

Для Animator, 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(); } } 

Таким образом, решена моя проблема, если вы не нашли другого решения, надеюсь, что это может вам помочь, удачи.