diff options
author | Scott Lobdell <slobdell@google.com> | 2021-08-04 03:02:11 +0000 |
---|---|---|
committer | Scott Lobdell <slobdell@google.com> | 2021-08-06 17:25:21 +0000 |
commit | 9d10272031d3f400d399db45927abf3be739b074 (patch) | |
tree | b9a3f179cf0abb8f6986f4c2268a617a34d663c8 /graphics/java/android | |
parent | 22fd7d8dfaf39ca6b15bd360409f3fa580adf2f6 (diff) | |
parent | b3abfad71a54152026b023b831ddd1793f361fa8 (diff) |
Merge SP1A.210803.001
Change-Id: I09253f8614e9ee85a59460f3ef25f17dd98cac80
Diffstat (limited to 'graphics/java/android')
-rw-r--r-- | graphics/java/android/graphics/drawable/RippleAnimationSession.java | 13 | ||||
-rw-r--r-- | graphics/java/android/graphics/drawable/RippleDrawable.java | 12 |
2 files changed, 23 insertions, 2 deletions
diff --git a/graphics/java/android/graphics/drawable/RippleAnimationSession.java b/graphics/java/android/graphics/drawable/RippleAnimationSession.java index 74fb618f8fd7..492520910afd 100644 --- a/graphics/java/android/graphics/drawable/RippleAnimationSession.java +++ b/graphics/java/android/graphics/drawable/RippleAnimationSession.java @@ -53,6 +53,7 @@ public final class RippleAnimationSession { private long mStartTime; private boolean mForceSoftware; private Animator mLoopAnimation; + private Animator mCurrentAnimation; RippleAnimationSession(@NonNull AnimationProperties<Float, Paint> properties, boolean forceSoftware) { @@ -74,6 +75,12 @@ public final class RippleAnimationSession { return this; } + void end() { + if (mCurrentAnimation != null) { + mCurrentAnimation.end(); + } + } + @NonNull RippleAnimationSession exit(Canvas canvas) { if (isHwAccelerated(canvas)) exitHardware((RecordingCanvas) canvas); else exitSoftware(); @@ -114,10 +121,12 @@ public final class RippleAnimationSession { if (mLoopAnimation != null) mLoopAnimation.cancel(); Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); + if (mCurrentAnimation == expand) mCurrentAnimation = null; } }); expand.setInterpolator(LINEAR_INTERPOLATOR); expand.start(); + mCurrentAnimation = expand; } private long computeDelay() { @@ -147,6 +156,7 @@ public final class RippleAnimationSession { if (mLoopAnimation != null) mLoopAnimation.cancel(); Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); + if (mCurrentAnimation == exit) mCurrentAnimation = null; } }); exit.setTarget(canvas); @@ -155,6 +165,7 @@ public final class RippleAnimationSession { long delay = computeDelay(); exit.setStartDelay(delay); exit.start(); + mCurrentAnimation = exit; } private void enterHardware(RecordingCanvas canvas) { @@ -167,6 +178,7 @@ public final class RippleAnimationSession { mStartTime + MAX_NOISE_PHASE); loop.setTarget(canvas); startAnimation(expand, loop); + mCurrentAnimation = expand; } private void startAnimation(Animator expand, Animator loop) { @@ -200,6 +212,7 @@ public final class RippleAnimationSession { mProperties.getShader().setNoisePhase((float) loop.getAnimatedValue()); }); startAnimation(expand, loop); + mCurrentAnimation = expand; } void setRadius(float radius) { diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java index b994ad20320b..d3cff5cb81ff 100644 --- a/graphics/java/android/graphics/drawable/RippleDrawable.java +++ b/graphics/java/android/graphics/drawable/RippleDrawable.java @@ -278,6 +278,15 @@ public class RippleDrawable extends LayerDrawable { } cancelExitingRipples(); + endPatternedAnimations(); + } + + private void endPatternedAnimations() { + for (int i = 0; i < mRunningAnimations.size(); i++) { + RippleAnimationSession session = mRunningAnimations.get(i); + session.end(); + } + mRunningAnimations.clear(); } private void cancelExitingRipples() { @@ -291,7 +300,6 @@ public class RippleDrawable extends LayerDrawable { Arrays.fill(ripples, 0, count, null); } mExitingRipplesCount = 0; - mExitingAnimation = true; // Always draw an additional "clean" frame after canceling animations. invalidateSelf(false); } @@ -714,7 +722,7 @@ public class RippleDrawable extends LayerDrawable { } cancelExitingRipples(); - exitPatternedAnimation(); + endPatternedAnimations(); } @Override |