How to reset ObjectAnimator for it initial status?

I want to vibrate a view using scaleX and scaleY, and I do it with this code, but the problem is that sometimes the view is not properly reset and it displays with the scale applied ....

I want that at the end of the animation, the view should always see with its original status

this is the code:

ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1f, 0.9f); scaleX.setDuration(50); scaleX.setRepeatCount(5); scaleX.setRepeatMode(Animation.REVERSE); ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1f, 0.9f); scaleY.setDuration(50); scaleY.setRepeatCount(5); scaleY.setRepeatMode(Animation.REVERSE); set.play(scaleX).with(scaleY); set.start(); 

thanks

+7
android android-view android-animation objectanimator
source share
2 answers

For ValueAnimator and ObjectAnimator can be as follows:

 animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { animation.removeListener(this); animation.setDuration(0); ((ValueAnimator) animation).reverse(); } }); 

UPDATE On Android 7, this does not work. The best way to use an interpolator.

 public class ReverseInterpolator implements Interpolator { private final Interpolator delegate; public ReverseInterpolator(Interpolator delegate){ this.delegate = delegate; } public ReverseInterpolator(){ this(new LinearInterpolator()); } @Override public float getInterpolation(float input) { return 1 - delegate.getInterpolation(input); } } 

In your code

 animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { animation.removeListener(this); animation.setDuration(0); animation.setInterpolator(new ReverseInterpolator()); animation.start(); } }); 
+10
source share

You can add an AnimatorListener to receive notifications of animation completion:

 scaleY.addListener(new AnimatorListener() { @Override public void onAnimationEnd(Animator animation) { // TODO Restore view } @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } }); 
-3
source share

All Articles