Lionel Messi
Lionel Messi

Reputation: 395

Android: how to use ValueAnimator

I want to do a translate animation using this following

public static void move(TextView view){

    ValueAnimator va = ValueAnimator.ofFloat(0f, 3f);
    int mDuration = 3000; //in millis
    va.setDuration(mDuration);
    va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        public void onAnimationUpdate(ValueAnimator animation) {

        }
    });
    va.setRepeatCount(5);
    va.start();
}

But I don't know how to use onAnimationUpdate method.

Can anyone help please?

Upvotes: 37

Views: 51680

Answers (2)

M Shafaei N
M Shafaei N

Reputation: 449

ValueAnimator is a great tool for making animations. Usually we have three steps:

Step 1- Create your ValueAnimator class by

ValueAnimator animator = ValueAnimator.ofFloat(start value, end value);

Step 2- Adding one update listener and overriding at least onAnimationUpdate() function

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            float value = (float) animator.getAnimatedValue();
            
            //this value should be used to update properties of views.
            //just don't forget to run invalidate function of your views 
              // to redraw them. 
        }
    });

Step 3-

animator.start();

Upvotes: 15

Bartek Lipinski
Bartek Lipinski

Reputation: 31438

If you really, really, really want to use ValueAnimator for animating translation of the View you can do it this way (finishing your example, assuming you meant translationX.

Bare in mind that you're animating translation from 0px to 3px, so you probably won't see much difference.

fun move(view: TextView) {
  val va = ValueAnimator.ofFloat(0f, 3f)
  va.duration = 3000 //in millis
  va.addUpdateListener { animation -> view.translationX = animation.animatedValue as Float }
  va.repeatCount = 5
  va.start()
}

Upvotes: 83

Related Questions