OSDN Git Service

Update ripple drawable target radius on bounds change
authorAlan Viverette <alanv@google.com>
Sat, 16 May 2015 00:22:24 +0000 (17:22 -0700)
committerAlan Viverette <alanv@google.com>
Sat, 16 May 2015 00:22:24 +0000 (17:22 -0700)
Only bothers with the background and active ripple, since the exiting
ripples are in hardware animation mode anyway and can't be updated.

Bug: 21079749
Change-Id: I0f70c0c0feea32e2c70bb9b1b0fa3b7846b20c7f

graphics/java/android/graphics/drawable/RippleComponent.java
graphics/java/android/graphics/drawable/RippleDrawable.java

index 0412e35..5ba2f93 100644 (file)
@@ -57,14 +57,19 @@ abstract class RippleComponent {
         mBounds = bounds;
     }
 
+    public void onBoundsChange() {
+        if (!mHasMaxRadius) {
+            mTargetRadius = getTargetRadius(mBounds);
+            onTargetRadiusChanged(mTargetRadius);
+        }
+    }
+
     public final void setup(float maxRadius, float density) {
         if (maxRadius >= 0) {
             mHasMaxRadius = true;
             mTargetRadius = maxRadius;
         } else {
-            final float halfWidth = mBounds.width() / 2.0f;
-            final float halfHeight = mBounds.height() / 2.0f;
-            mTargetRadius = (float) Math.sqrt(halfWidth * halfWidth + halfHeight * halfHeight);
+            mTargetRadius = getTargetRadius(mBounds);
         }
 
         mDensity = density;
@@ -72,6 +77,12 @@ abstract class RippleComponent {
         onTargetRadiusChanged(mTargetRadius);
     }
 
+    private static float getTargetRadius(Rect bounds) {
+        final float halfWidth = bounds.width() / 2.0f;
+        final float halfHeight = bounds.height() / 2.0f;
+        return (float) Math.sqrt(halfWidth * halfWidth + halfHeight * halfHeight);
+    }
+
     /**
      * Starts a ripple enter animation.
      *
index efc171c..f7e8ed0 100644 (file)
@@ -31,7 +31,6 @@ import android.graphics.Bitmap;
 import android.graphics.BitmapShader;
 import android.graphics.Canvas;
 import android.graphics.Color;
-import android.graphics.ColorFilter;
 import android.graphics.Matrix;
 import android.graphics.Outline;
 import android.graphics.Paint;
@@ -294,6 +293,14 @@ public class RippleDrawable extends LayerDrawable {
             onHotspotBoundsChanged();
         }
 
+        if (mBackground != null) {
+            mBackground.onBoundsChange();
+        }
+
+        if (mRipple != null) {
+            mRipple.onBoundsChange();
+        }
+
         invalidateSelf();
     }