Android ValueAnimator pauses during repeat

So I'm using a ValueAnimator to animate a stick figure's limbs from one position to another, in an infinite loop, or at least until the animation is stopped. My problem is that when the animator repeats I have a slight pause as if the animation is lagging behind, but it only happens when the animation repeats. I have other animations that only happen once and those run perfectly smoothly, and they have just as much computation each time so I'm currently thinking that it's a problem with the ValueAnimator.

In the past I was able to find other people complaining about this problem, but I haven't been able to find anyone who has found a solution. Do you guys know if this is a real problem with the Android ValueAnimator? If so, do you know of any solutions? If not, do you guys have any ideas as to why this could be happening to me in just that one place in the animation? I'm really stuck on this one.

My code for the ValueAnimator setup is this:

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

Answers


for Animation, you can configure the interpolator as LinearInterpolator in the animation file :

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

for Animator, LinearInterpolator also work for me, I had a rotate animator, do 360 degrees rotation and repeat infinite:

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

}

that way solved my problem, if you couldn't find another solution, hope this can help you, good luck.


Need Your Help

Create a discount code for my own app in google play store

android discount

Is it possible with google play store having a non free app that can be downloaded for free (or with a certain discount) if the user provide a promotional code?

Passing values from one page to another in JavaScript

javascript html

In below code, the value is not passed from one page to another.