summaryrefslogtreecommitdiffstats
path: root/graphics/java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2015-06-08 16:10:27 -0700
committerAlan Viverette <alanv@google.com>2015-06-08 16:10:27 -0700
commit99ca2a8470a48906aaba2d76c856037933496352 (patch)
tree440a0fbe5170cce1e3f8018070b8b81021c581d1 /graphics/java
parentb5766468538de200d26012d96019db26bccac5d4 (diff)
downloadframeworks_base-99ca2a8470a48906aaba2d76c856037933496352.zip
frameworks_base-99ca2a8470a48906aaba2d76c856037933496352.tar.gz
frameworks_base-99ca2a8470a48906aaba2d76c856037933496352.tar.bz2
Account for hotspot bounds in RippleDrawable projection check
Bug: 21502154 Change-Id: Iedf4bd07f10ec13070a68870304ab651c1f15c68
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/graphics/drawable/RippleDrawable.java26
1 files changed, 19 insertions, 7 deletions
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index 1af48ca..134451b 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -333,17 +333,29 @@ public class RippleDrawable extends LayerDrawable {
*/
@Override
public boolean isProjected() {
- // If the maximum radius is contained entirely within the bounds, we
- // don't need to project this ripple.
+ // If the layer is bounded, then we don't need to project.
+ if (isBounded()) {
+ return false;
+ }
+
+ // Otherwise, if the maximum radius is contained entirely within the
+ // bounds then we don't need to project. This is sort of a hack to
+ // prevent check box ripples from being projected across the edges of
+ // scroll views. It does not impact rendering performance, and it can
+ // be removed once we have better handling of projection in scrollable
+ // views.
final int radius = mState.mMaxRadius;
- final Rect bounds = getBounds();
- if (radius != RADIUS_AUTO && radius <= bounds.width() / 2
- && radius <= bounds.height() / 2) {
+ final Rect drawableBounds = getBounds();
+ final Rect hotspotBounds = mHotspotBounds;
+ if (radius != RADIUS_AUTO
+ && radius <= hotspotBounds.width() / 2
+ && radius <= hotspotBounds.height() / 2
+ && (drawableBounds.equals(hotspotBounds)
+ || drawableBounds.contains(hotspotBounds))) {
return false;
}
- // Otherwise, if the layer is bounded then we don't need to project.
- return !isBounded();
+ return true;
}
private boolean isBounded() {