diff options
author | 2021-04-08 23:49:41 +0000 | |
---|---|---|
committer | 2021-04-08 23:49:41 +0000 | |
commit | ad14c212bc9f2029d2ef3b8f5e74573205f438eb (patch) | |
tree | 38beaf2fa01d7e5aedcbc82b1f3b266b4145b66c | |
parent | c16a826d85543f1ed1ff34f9b03dc30d6657a25a (diff) | |
parent | 3047cb298d05ef8c61ab2bc7f63e32ca936232a6 (diff) |
Merge "Ripple radius bug" into sc-dev
-rw-r--r-- | graphics/java/android/graphics/drawable/RippleDrawable.java | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java index 8b8cbbc8a9a6..086533263634 100644 --- a/graphics/java/android/graphics/drawable/RippleDrawable.java +++ b/graphics/java/android/graphics/drawable/RippleDrawable.java @@ -180,6 +180,7 @@ public class RippleDrawable extends LayerDrawable { private Matrix mMaskMatrix; private PorterDuffColorFilter mMaskColorFilter; private boolean mHasValidMask; + private int mComputedRadius = -1; /** The current ripple. May be actively animating or pending entry. */ private RippleForeground mRipple; @@ -385,9 +386,7 @@ public class RippleDrawable extends LayerDrawable { mRipple.onBoundsChange(); } - mState.mMaxRadius = mState.mMaxRadius <= 0 && mState.mRippleStyle != STYLE_SOLID - ? (int) computeRadius() - : mState.mMaxRadius; + mComputedRadius = Math.round(computeRadius()); invalidateSelf(); } @@ -918,7 +917,7 @@ public class RippleDrawable extends LayerDrawable { ColorFilter origFilter = p.getColorFilter(); p.setColorFilter(mMaskColorFilter); p.setAlpha(alpha); - c.drawCircle(cx, cy, mState.mMaxRadius, p); + c.drawCircle(cx, cy, getComputedRadius(), p); p.setAlpha(origAlpha); p.setColorFilter(origFilter); } @@ -930,11 +929,17 @@ public class RippleDrawable extends LayerDrawable { return radius; } + private int getComputedRadius() { + if (mState.mMaxRadius >= 0) return mState.mMaxRadius; + if (mComputedRadius >= 0) return mComputedRadius; + return (int) computeRadius(); + } + @NonNull private RippleAnimationSession.AnimationProperties<Float, Paint> createAnimationProperties( float x, float y, float cx, float cy, float w, float h) { Paint p = new Paint(mRipplePaint); - float radius = mState.mMaxRadius; + float radius = getComputedRadius(); RippleAnimationSession.AnimationProperties<Float, Paint> properties; RippleShader shader = new RippleShader(); int color = mMaskColorFilter == null |