From c81c0826289550864d8448a7286e59421e78db39 Mon Sep 17 00:00:00 2001 From: Doris Liu Date: Thu, 28 May 2015 10:18:46 -0700 Subject: [PATCH] Fix ScrollView's EdgeEffect to respect clipToPadding flag bug: 19126514 Change-Id: I21fe4fd3e2f1240ee31c51f9deac7f285ffe2408 --- core/java/android/widget/ScrollView.java | 44 +++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 2709f252483b..ca57d1a6a929 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -1704,12 +1704,26 @@ public class ScrollView extends FrameLayout { super.draw(canvas); if (mEdgeGlowTop != null) { final int scrollY = mScrollY; + final boolean clipToPadding = getClipToPadding(); if (!mEdgeGlowTop.isFinished()) { final int restoreCount = canvas.save(); - final int width = getWidth() - mPaddingLeft - mPaddingRight; - - canvas.translate(mPaddingLeft, Math.min(0, scrollY)); - mEdgeGlowTop.setSize(width, getHeight()); + final int width; + final int height; + final float translateX; + final float translateY; + if (clipToPadding) { + width = getWidth() - mPaddingLeft - mPaddingRight; + height = getHeight() - mPaddingTop - mPaddingBottom; + translateX = mPaddingLeft; + translateY = mPaddingTop; + } else { + width = getWidth(); + height = getHeight(); + translateX = 0; + translateY = 0; + } + canvas.translate(translateX, Math.min(0, scrollY) + translateY); + mEdgeGlowTop.setSize(width, height); if (mEdgeGlowTop.draw(canvas)) { postInvalidateOnAnimation(); } @@ -1717,11 +1731,23 @@ public class ScrollView extends FrameLayout { } if (!mEdgeGlowBottom.isFinished()) { final int restoreCount = canvas.save(); - final int width = getWidth() - mPaddingLeft - mPaddingRight; - final int height = getHeight(); - - canvas.translate(-width + mPaddingLeft, - Math.max(getScrollRange(), scrollY) + height); + final int width; + final int height; + final float translateX; + final float translateY; + if (clipToPadding) { + width = getWidth() - mPaddingLeft - mPaddingRight; + height = getHeight() - mPaddingTop - mPaddingBottom; + translateX = mPaddingLeft; + translateY = mPaddingTop; + } else { + width = getWidth(); + height = getHeight(); + translateX = 0; + translateY = 0; + } + canvas.translate(-width + translateX, + Math.max(getScrollRange(), scrollY) + height + translateY); canvas.rotate(180, width, 0); mEdgeGlowBottom.setSize(width, height); if (mEdgeGlowBottom.draw(canvas)) { -- 2.11.0