diff options
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() { |
