summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lucas Dupin <dupin@google.com> 2021-04-08 23:49:41 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-04-08 23:49:41 +0000
commitad14c212bc9f2029d2ef3b8f5e74573205f438eb (patch)
tree38beaf2fa01d7e5aedcbc82b1f3b266b4145b66c
parentc16a826d85543f1ed1ff34f9b03dc30d6657a25a (diff)
parent3047cb298d05ef8c61ab2bc7f63e32ca936232a6 (diff)
Merge "Ripple radius bug" into sc-dev
-rw-r--r--graphics/java/android/graphics/drawable/RippleDrawable.java15
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