diff options
| author | 2016-01-12 01:36:23 +0000 | |
|---|---|---|
| committer | 2016-01-12 01:36:23 +0000 | |
| commit | a73abeaf4b7b158664c34124d8df39ad843f7451 (patch) | |
| tree | 80f5af4697a998212ce8f930d58e348f80788f91 | |
| parent | 9f2c939730730e76afc46e891b82499b499503e1 (diff) | |
| parent | fc8e3cb768b7dfd7c0ed0fb93dd9d735887e8d45 (diff) | |
Merge "Get animation update timing for AVD" into mnc-dr1.5-dev
| -rw-r--r-- | graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java index 1857345968fd..e786971fec82 100644 --- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java @@ -19,6 +19,7 @@ import android.animation.AnimatorInflater; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.Animator.AnimatorListener; +import android.animation.ValueAnimator; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.res.ColorStateList; @@ -140,6 +141,16 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { /** Local, mutable animator set. */ private final AnimatorSet mAnimatorSet = new AnimatorSet(); + // Setup a value animator to get animation update callbacks. + private final ValueAnimator mUpdateAnim = ValueAnimator.ofFloat(0f, 1f); + private final ValueAnimator.AnimatorUpdateListener mUpdateListener = + new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + invalidateSelf(); + } + }; + /** * The resources against which this drawable was created. Used to attempt * to inflate animators if applyTheme() doesn't get called. @@ -605,6 +616,32 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { if (!mHasAnimatorSet) { mAnimatedVectorState.prepareLocalAnimators(mAnimatorSet, mRes); mHasAnimatorSet = true; + // Setup an infinitely running ValueAnimator, start it when AnimatorSet starts and + // end it when AnimatorSet ends, so we get the animation update timing for + // invalidating the drawable. Ideally, we would set an update listener on AnimatorSet, + // but since AnimatorSet doesn't support that yet, this is the alternative to achieve + // the same goal. + mUpdateAnim.setRepeatCount(ValueAnimator.INFINITE); + mUpdateAnim.addUpdateListener(mUpdateListener); + mAnimatorSet.addListener(new AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + mUpdateAnim.start(); + } + + @Override + public void onAnimationEnd(Animator animation) { + mUpdateAnim.end(); + } + + @Override + public void onAnimationCancel(Animator animation) { + } + + @Override + public void onAnimationRepeat(Animator animation) { + } + }); mRes = null; } } @@ -730,4 +767,4 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mAnimationCallbacks.clear(); } -}
\ No newline at end of file +} |