Loading core/java/android/view/RenderNode.java +1 −1 Original line number Diff line number Diff line Loading @@ -779,7 +779,7 @@ public class RenderNode { return mOwningView != null && mOwningView.mAttachInfo != null; } public void addAnimator(AnimatedVectorDrawable.VectorDrawableAnimator animatorSet) { public void addAnimator(AnimatedVectorDrawable.VectorDrawableAnimatorRT animatorSet) { if (mOwningView == null || mOwningView.mAttachInfo == null) { throw new IllegalStateException("Cannot start this animator on a detached view!"); } Loading core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -175,13 +175,13 @@ static const JNINativeMethod gMethods[] = { {"nCreatePathPropertyHolder", "!(JIFF)J", (void*)createPathPropertyHolder}, {"nCreateRootAlphaPropertyHolder", "!(JFF)J", (void*)createRootAlphaPropertyHolder}, {"nSetPropertyHolderData", "(J[FI)V", (void*)setPropertyHolderData}, {"nStart", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;I)V", (void*)start}, {"nReverse", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;I)V", (void*)reverse}, {"nStart", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)start}, {"nReverse", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)reverse}, {"nEnd", "!(J)V", (void*)end}, {"nReset", "!(J)V", (void*)reset}, }; const char* const kClassPathName = "android/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator"; const char* const kClassPathName = "android/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT"; int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env) { gVectorDrawableAnimatorClassInfo.clazz = FindClassOrDie(env, kClassPathName); gVectorDrawableAnimatorClassInfo.clazz = MakeGlobalRefOrDie(env, Loading @@ -189,7 +189,7 @@ int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env) { gVectorDrawableAnimatorClassInfo.callOnFinished = GetStaticMethodIDOrDie( env, gVectorDrawableAnimatorClassInfo.clazz, "callOnFinished", "(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;I)V"); "(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V"); return RegisterMethodsOrDie(env, "android/graphics/drawable/AnimatedVectorDrawable", gMethods, NELEM(gMethods)); } Loading graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java +148 −25 Original line number Diff line number Diff line Loading @@ -154,7 +154,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private static final boolean DBG_ANIMATION_VECTOR_DRAWABLE = false; /** Local, mutable animator set. */ private final VectorDrawableAnimator mAnimatorSet = new VectorDrawableAnimator(this); private VectorDrawableAnimator mAnimatorSet = new VectorDrawableAnimatorRT(this); /** * The resources against which this drawable was created. Used to attempt Loading @@ -164,8 +164,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private AnimatedVectorDrawableState mAnimatedVectorState; /** Whether the animator set has been prepared. */ private boolean mHasAnimatorSet; /** The animator set that is parsed from the xml. */ private AnimatorSet mAnimatorSetFromXml = null; private boolean mMutated; Loading Loading @@ -234,9 +234,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { @Override public void draw(Canvas canvas) { if (canvas.isHardwareAccelerated()) { mAnimatorSet.recordLastSeenTarget((DisplayListCanvas) canvas); } mAnimatorSet.onDraw(canvas); mAnimatedVectorState.mVectorDrawable.draw(canvas); } Loading Loading @@ -392,6 +390,24 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mRes = state.mPendingAnims == null ? null : res; } /** * Force to animate on UI thread. * @hide */ public void forceAnimationOnUI() { if (mAnimatorSet instanceof VectorDrawableAnimatorRT) { VectorDrawableAnimatorRT animator = (VectorDrawableAnimatorRT) mAnimatorSet; if (animator.isRunning()) { throw new UnsupportedOperationException("Cannot force Animated Vector Drawable to" + " run on UI thread when the animation has started on RenderThread."); } mAnimatorSet = new VectorDrawableAnimatorUI(this); if (mAnimatorSetFromXml != null) { mAnimatorSet.init(mAnimatorSetFromXml); } } } @Override public boolean canApplyTheme() { return (mAnimatedVectorState != null && mAnimatedVectorState.canApplyTheme()) Loading Loading @@ -612,6 +628,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { * Resets the AnimatedVectorDrawable to the start state as specified in the animators. */ public void reset() { ensureAnimatorSet(); mAnimatorSet.reset(); } Loading @@ -623,13 +640,12 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { @NonNull private void ensureAnimatorSet() { if (!mHasAnimatorSet) { if (mAnimatorSetFromXml == null) { // TODO: Skip the AnimatorSet creation and init the VectorDrawableAnimator directly // with a list of LocalAnimators. AnimatorSet set = new AnimatorSet(); mAnimatedVectorState.prepareLocalAnimators(set, mRes); mHasAnimatorSet = true; mAnimatorSet.initWithAnimatorSet(set); mAnimatorSetFromXml = new AnimatorSet(); mAnimatedVectorState.prepareLocalAnimators(mAnimatorSetFromXml, mRes); mAnimatorSet.init(mAnimatorSetFromXml); mRes = null; } } Loading Loading @@ -724,7 +740,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { // A helper function to clean up the animator listener in the mAnimatorSet. private void removeAnimatorSetListener() { if (mAnimatorListener != null) { mAnimatorSet.removeListener(); mAnimatorSet.removeListener(mAnimatorListener); mAnimatorListener = null; } } Loading Loading @@ -754,10 +770,100 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mAnimationCallbacks.clear(); } private interface VectorDrawableAnimator { void init(AnimatorSet set); void start(); void end(); void reset(); void reverse(); boolean canReverse(); void setListener(AnimatorListener listener); void removeListener(AnimatorListener listener); void onDraw(Canvas canvas); boolean isStarted(); boolean isRunning(); } private static class VectorDrawableAnimatorUI implements VectorDrawableAnimator { private AnimatorSet mSet = new AnimatorSet(); private final Drawable mDrawable; VectorDrawableAnimatorUI(AnimatedVectorDrawable drawable) { mDrawable = drawable; } @Override public void init(AnimatorSet set) { mSet = set; } @Override public void start() { if (mSet.isStarted()) { return; } mSet.start(); invalidateOwningView(); } @Override public void end() { mSet.end(); } @Override public void reset() { start(); mSet.cancel(); } @Override public void reverse() { mSet.reverse(); invalidateOwningView(); } @Override public boolean canReverse() { return mSet.canReverse(); } @Override public void setListener(AnimatorListener listener) { mSet.addListener(listener); } @Override public void removeListener(AnimatorListener listener) { mSet.removeListener(listener); } @Override public void onDraw(Canvas canvas) { if (mSet.isStarted()) { invalidateOwningView(); } } @Override public boolean isStarted() { return mSet.isStarted(); } @Override public boolean isRunning() { return mSet.isRunning(); } private void invalidateOwningView() { mDrawable.invalidateSelf(); } } /** * @hide */ public static class VectorDrawableAnimator { public static class VectorDrawableAnimatorRT implements VectorDrawableAnimator { private static final int NONE = 0; private static final int START_ANIMATION = 1; private static final int REVERSE_ANIMATION = 2; Loading @@ -779,7 +885,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private int mPendingAnimationAction = NONE; private final Drawable mDrawable; VectorDrawableAnimator(AnimatedVectorDrawable drawable) { VectorDrawableAnimatorRT(AnimatedVectorDrawable drawable) { mDrawable = drawable; mSetPtr = nCreateAnimatorSet(); // Increment ref count on native AnimatorSet, so it doesn't get released before Java Loading @@ -787,7 +893,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mSetRefBasePtr = new VirtualRefBasePtr(mSetPtr); } private void initWithAnimatorSet(AnimatorSet set) { @Override public void init(AnimatorSet set) { if (mInitialized) { // Already initialized throw new UnsupportedOperationException("VectorDrawableAnimator cannot be " + Loading Loading @@ -816,7 +923,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { ArrayList<Animator> animators = set.getChildAnimations(); boolean playTogether = set.shouldPlayTogether(); // Convert AnimatorSet to VectorDrawableAnimator // Convert AnimatorSet to VectorDrawableAnimatorRT for (int i = 0; i < animators.size(); i++) { Animator animator = animators.get(i); // Here we only support ObjectAnimator Loading Loading @@ -1060,6 +1167,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mDrawable.invalidateSelf(); } @Override public void start() { if (!mInitialized) { return; Loading @@ -1083,6 +1191,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } } @Override public void end() { if (mInitialized && useLastSeenTarget()) { // If no target has ever been set, no-op Loading @@ -1091,6 +1200,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } } @Override public void reset() { if (mInitialized && useLastSeenTarget()) { // If no target has ever been set, no-op Loading @@ -1101,7 +1211,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { // Current (imperfect) Java AnimatorSet cannot be reversed when the set contains sequential // animators or when the animator set has a start delay void reverse() { @Override public void reverse() { if (!mIsReversible || !mInitialized) { return; } Loading @@ -1125,29 +1236,41 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { return mSetPtr; } boolean canReverse() { @Override public boolean canReverse() { return mIsReversible; } boolean isStarted() { @Override public boolean isStarted() { return mStarted; } boolean isRunning() { @Override public boolean isRunning() { if (!mInitialized) { return false; } return mStarted; } void setListener(AnimatorListener listener) { @Override public void setListener(AnimatorListener listener) { mListener = listener; } void removeListener() { @Override public void removeListener(AnimatorListener listener) { mListener = null; } @Override public void onDraw(Canvas canvas) { if (canvas.isHardwareAccelerated()) { recordLastSeenTarget((DisplayListCanvas) canvas); } } private void onAnimationEnd(int listenerId) { if (listenerId != mLastListenerId) { return; Loading @@ -1162,7 +1285,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } // onFinished: should be called from native private static void callOnFinished(VectorDrawableAnimator set, int id) { private static void callOnFinished(VectorDrawableAnimatorRT set, int id) { set.onAnimationEnd(id); } } Loading @@ -1183,8 +1306,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private static native long nCreateRootAlphaPropertyHolder(long nativePtr, float startValue, float endValue); private static native void nSetPropertyHolderData(long nativePtr, float[] data, int length); private static native void nStart(long animatorSetPtr, VectorDrawableAnimator set, int id); private static native void nReverse(long animatorSetPtr, VectorDrawableAnimator set, int id); private static native void nStart(long animatorSetPtr, VectorDrawableAnimatorRT set, int id); private static native void nReverse(long animatorSetPtr, VectorDrawableAnimatorRT set, int id); private static native void nEnd(long animatorSetPtr); private static native void nReset(long animatorSetPtr); } preloaded-classes +1 −1 Original line number Diff line number Diff line Loading @@ -907,7 +907,7 @@ android.graphics.drawable.AnimatedVectorDrawable android.graphics.drawable.AnimatedVectorDrawable$1 android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimator android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorRT android.graphics.drawable.AnimationDrawable android.graphics.drawable.AnimationDrawable$AnimationState android.graphics.drawable.BitmapDrawable Loading Loading
core/java/android/view/RenderNode.java +1 −1 Original line number Diff line number Diff line Loading @@ -779,7 +779,7 @@ public class RenderNode { return mOwningView != null && mOwningView.mAttachInfo != null; } public void addAnimator(AnimatedVectorDrawable.VectorDrawableAnimator animatorSet) { public void addAnimator(AnimatedVectorDrawable.VectorDrawableAnimatorRT animatorSet) { if (mOwningView == null || mOwningView.mAttachInfo == null) { throw new IllegalStateException("Cannot start this animator on a detached view!"); } Loading
core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -175,13 +175,13 @@ static const JNINativeMethod gMethods[] = { {"nCreatePathPropertyHolder", "!(JIFF)J", (void*)createPathPropertyHolder}, {"nCreateRootAlphaPropertyHolder", "!(JFF)J", (void*)createRootAlphaPropertyHolder}, {"nSetPropertyHolderData", "(J[FI)V", (void*)setPropertyHolderData}, {"nStart", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;I)V", (void*)start}, {"nReverse", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;I)V", (void*)reverse}, {"nStart", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)start}, {"nReverse", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)reverse}, {"nEnd", "!(J)V", (void*)end}, {"nReset", "!(J)V", (void*)reset}, }; const char* const kClassPathName = "android/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator"; const char* const kClassPathName = "android/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT"; int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env) { gVectorDrawableAnimatorClassInfo.clazz = FindClassOrDie(env, kClassPathName); gVectorDrawableAnimatorClassInfo.clazz = MakeGlobalRefOrDie(env, Loading @@ -189,7 +189,7 @@ int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env) { gVectorDrawableAnimatorClassInfo.callOnFinished = GetStaticMethodIDOrDie( env, gVectorDrawableAnimatorClassInfo.clazz, "callOnFinished", "(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;I)V"); "(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V"); return RegisterMethodsOrDie(env, "android/graphics/drawable/AnimatedVectorDrawable", gMethods, NELEM(gMethods)); } Loading
graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java +148 −25 Original line number Diff line number Diff line Loading @@ -154,7 +154,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private static final boolean DBG_ANIMATION_VECTOR_DRAWABLE = false; /** Local, mutable animator set. */ private final VectorDrawableAnimator mAnimatorSet = new VectorDrawableAnimator(this); private VectorDrawableAnimator mAnimatorSet = new VectorDrawableAnimatorRT(this); /** * The resources against which this drawable was created. Used to attempt Loading @@ -164,8 +164,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private AnimatedVectorDrawableState mAnimatedVectorState; /** Whether the animator set has been prepared. */ private boolean mHasAnimatorSet; /** The animator set that is parsed from the xml. */ private AnimatorSet mAnimatorSetFromXml = null; private boolean mMutated; Loading Loading @@ -234,9 +234,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { @Override public void draw(Canvas canvas) { if (canvas.isHardwareAccelerated()) { mAnimatorSet.recordLastSeenTarget((DisplayListCanvas) canvas); } mAnimatorSet.onDraw(canvas); mAnimatedVectorState.mVectorDrawable.draw(canvas); } Loading Loading @@ -392,6 +390,24 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mRes = state.mPendingAnims == null ? null : res; } /** * Force to animate on UI thread. * @hide */ public void forceAnimationOnUI() { if (mAnimatorSet instanceof VectorDrawableAnimatorRT) { VectorDrawableAnimatorRT animator = (VectorDrawableAnimatorRT) mAnimatorSet; if (animator.isRunning()) { throw new UnsupportedOperationException("Cannot force Animated Vector Drawable to" + " run on UI thread when the animation has started on RenderThread."); } mAnimatorSet = new VectorDrawableAnimatorUI(this); if (mAnimatorSetFromXml != null) { mAnimatorSet.init(mAnimatorSetFromXml); } } } @Override public boolean canApplyTheme() { return (mAnimatedVectorState != null && mAnimatedVectorState.canApplyTheme()) Loading Loading @@ -612,6 +628,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { * Resets the AnimatedVectorDrawable to the start state as specified in the animators. */ public void reset() { ensureAnimatorSet(); mAnimatorSet.reset(); } Loading @@ -623,13 +640,12 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { @NonNull private void ensureAnimatorSet() { if (!mHasAnimatorSet) { if (mAnimatorSetFromXml == null) { // TODO: Skip the AnimatorSet creation and init the VectorDrawableAnimator directly // with a list of LocalAnimators. AnimatorSet set = new AnimatorSet(); mAnimatedVectorState.prepareLocalAnimators(set, mRes); mHasAnimatorSet = true; mAnimatorSet.initWithAnimatorSet(set); mAnimatorSetFromXml = new AnimatorSet(); mAnimatedVectorState.prepareLocalAnimators(mAnimatorSetFromXml, mRes); mAnimatorSet.init(mAnimatorSetFromXml); mRes = null; } } Loading Loading @@ -724,7 +740,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { // A helper function to clean up the animator listener in the mAnimatorSet. private void removeAnimatorSetListener() { if (mAnimatorListener != null) { mAnimatorSet.removeListener(); mAnimatorSet.removeListener(mAnimatorListener); mAnimatorListener = null; } } Loading Loading @@ -754,10 +770,100 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mAnimationCallbacks.clear(); } private interface VectorDrawableAnimator { void init(AnimatorSet set); void start(); void end(); void reset(); void reverse(); boolean canReverse(); void setListener(AnimatorListener listener); void removeListener(AnimatorListener listener); void onDraw(Canvas canvas); boolean isStarted(); boolean isRunning(); } private static class VectorDrawableAnimatorUI implements VectorDrawableAnimator { private AnimatorSet mSet = new AnimatorSet(); private final Drawable mDrawable; VectorDrawableAnimatorUI(AnimatedVectorDrawable drawable) { mDrawable = drawable; } @Override public void init(AnimatorSet set) { mSet = set; } @Override public void start() { if (mSet.isStarted()) { return; } mSet.start(); invalidateOwningView(); } @Override public void end() { mSet.end(); } @Override public void reset() { start(); mSet.cancel(); } @Override public void reverse() { mSet.reverse(); invalidateOwningView(); } @Override public boolean canReverse() { return mSet.canReverse(); } @Override public void setListener(AnimatorListener listener) { mSet.addListener(listener); } @Override public void removeListener(AnimatorListener listener) { mSet.removeListener(listener); } @Override public void onDraw(Canvas canvas) { if (mSet.isStarted()) { invalidateOwningView(); } } @Override public boolean isStarted() { return mSet.isStarted(); } @Override public boolean isRunning() { return mSet.isRunning(); } private void invalidateOwningView() { mDrawable.invalidateSelf(); } } /** * @hide */ public static class VectorDrawableAnimator { public static class VectorDrawableAnimatorRT implements VectorDrawableAnimator { private static final int NONE = 0; private static final int START_ANIMATION = 1; private static final int REVERSE_ANIMATION = 2; Loading @@ -779,7 +885,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private int mPendingAnimationAction = NONE; private final Drawable mDrawable; VectorDrawableAnimator(AnimatedVectorDrawable drawable) { VectorDrawableAnimatorRT(AnimatedVectorDrawable drawable) { mDrawable = drawable; mSetPtr = nCreateAnimatorSet(); // Increment ref count on native AnimatorSet, so it doesn't get released before Java Loading @@ -787,7 +893,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mSetRefBasePtr = new VirtualRefBasePtr(mSetPtr); } private void initWithAnimatorSet(AnimatorSet set) { @Override public void init(AnimatorSet set) { if (mInitialized) { // Already initialized throw new UnsupportedOperationException("VectorDrawableAnimator cannot be " + Loading Loading @@ -816,7 +923,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { ArrayList<Animator> animators = set.getChildAnimations(); boolean playTogether = set.shouldPlayTogether(); // Convert AnimatorSet to VectorDrawableAnimator // Convert AnimatorSet to VectorDrawableAnimatorRT for (int i = 0; i < animators.size(); i++) { Animator animator = animators.get(i); // Here we only support ObjectAnimator Loading Loading @@ -1060,6 +1167,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mDrawable.invalidateSelf(); } @Override public void start() { if (!mInitialized) { return; Loading @@ -1083,6 +1191,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } } @Override public void end() { if (mInitialized && useLastSeenTarget()) { // If no target has ever been set, no-op Loading @@ -1091,6 +1200,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } } @Override public void reset() { if (mInitialized && useLastSeenTarget()) { // If no target has ever been set, no-op Loading @@ -1101,7 +1211,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { // Current (imperfect) Java AnimatorSet cannot be reversed when the set contains sequential // animators or when the animator set has a start delay void reverse() { @Override public void reverse() { if (!mIsReversible || !mInitialized) { return; } Loading @@ -1125,29 +1236,41 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { return mSetPtr; } boolean canReverse() { @Override public boolean canReverse() { return mIsReversible; } boolean isStarted() { @Override public boolean isStarted() { return mStarted; } boolean isRunning() { @Override public boolean isRunning() { if (!mInitialized) { return false; } return mStarted; } void setListener(AnimatorListener listener) { @Override public void setListener(AnimatorListener listener) { mListener = listener; } void removeListener() { @Override public void removeListener(AnimatorListener listener) { mListener = null; } @Override public void onDraw(Canvas canvas) { if (canvas.isHardwareAccelerated()) { recordLastSeenTarget((DisplayListCanvas) canvas); } } private void onAnimationEnd(int listenerId) { if (listenerId != mLastListenerId) { return; Loading @@ -1162,7 +1285,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } // onFinished: should be called from native private static void callOnFinished(VectorDrawableAnimator set, int id) { private static void callOnFinished(VectorDrawableAnimatorRT set, int id) { set.onAnimationEnd(id); } } Loading @@ -1183,8 +1306,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private static native long nCreateRootAlphaPropertyHolder(long nativePtr, float startValue, float endValue); private static native void nSetPropertyHolderData(long nativePtr, float[] data, int length); private static native void nStart(long animatorSetPtr, VectorDrawableAnimator set, int id); private static native void nReverse(long animatorSetPtr, VectorDrawableAnimator set, int id); private static native void nStart(long animatorSetPtr, VectorDrawableAnimatorRT set, int id); private static native void nReverse(long animatorSetPtr, VectorDrawableAnimatorRT set, int id); private static native void nEnd(long animatorSetPtr); private static native void nReset(long animatorSetPtr); }
preloaded-classes +1 −1 Original line number Diff line number Diff line Loading @@ -907,7 +907,7 @@ android.graphics.drawable.AnimatedVectorDrawable android.graphics.drawable.AnimatedVectorDrawable$1 android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimator android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorRT android.graphics.drawable.AnimationDrawable android.graphics.drawable.AnimationDrawable$AnimationState android.graphics.drawable.BitmapDrawable Loading