summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Doris Liu <tianliu@google.com> 2016-01-12 01:39:05 +0000
committer android-build-merger <android-build-merger@google.com> 2016-01-12 01:39:05 +0000
commit7537aa75968d127525ef8fba84f365514ae789a3 (patch)
tree13fc039088baa39a0c0c4c6ef8607bdef403ae47
parent728a2fa2723e6ee68853a55563fbf47aed965435 (diff)
parenta73abeaf4b7b158664c34124d8df39ad843f7451 (diff)
Merge "Get animation update timing for AVD" into mnc-dr1.5-dev
am: a73abeaf4b * commit 'a73abeaf4b7b158664c34124d8df39ad843f7451': Get animation update timing for AVD
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java39
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
+}