diff options
| author | Adam Cohen <adamcohen@google.com> | 2011-03-08 13:33:29 -0800 |
|---|---|---|
| committer | Adam Cohen <adamcohen@google.com> | 2011-03-08 14:13:29 -0800 |
| commit | 321aa2b0258691c55843dff919eb2705d069167a (patch) | |
| tree | de8bc4db43b1828bb6d9a026ee9c589e2bfe932e /core/java/android/widget/StackView.java | |
| parent | 6478e4f0b0a6d34251ca0125eb6067f038e344aa (diff) | |
Fixing inconsistency between invalidate region and draw region
Change-Id: I84458b31b4d3e8c305d64eb25e352fc4aba933d0
Diffstat (limited to 'core/java/android/widget/StackView.java')
| -rw-r--r-- | core/java/android/widget/StackView.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java index bab469b01cf9..21c61bdf67ab 100644 --- a/core/java/android/widget/StackView.java +++ b/core/java/android/widget/StackView.java @@ -531,6 +531,8 @@ public class StackView extends AdapterViewAnimator { @Override protected void dispatchDraw(Canvas canvas) { + boolean expandClipRegion = false; + canvas.getClipBounds(stackInvalidateRect); final int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { @@ -540,12 +542,22 @@ public class StackView extends AdapterViewAnimator { child.getAlpha() == 0f || child.getVisibility() != VISIBLE) { lp.resetInvalidateRect(); } - stackInvalidateRect.union(lp.getInvalidateRect()); + Rect childInvalidateRect = lp.getInvalidateRect(); + if (!childInvalidateRect.isEmpty()) { + expandClipRegion = true; + stackInvalidateRect.union(childInvalidateRect); + } + } + + // We only expand the clip bounds if necessary. + if (expandClipRegion) { + canvas.save(Canvas.CLIP_SAVE_FLAG); + canvas.clipRect(stackInvalidateRect, Region.Op.UNION); + super.dispatchDraw(canvas); + canvas.restore(); + } else { + super.dispatchDraw(canvas); } - canvas.save(Canvas.CLIP_SAVE_FLAG); - canvas.clipRect(stackInvalidateRect, Region.Op.UNION); - super.dispatchDraw(canvas); - canvas.restore(); } private void onLayout() { |
