OSDN Git Service

Fix ScrollView's EdgeEffect to respect clipToPadding flag
authorDoris Liu <tianliu@google.com>
Thu, 28 May 2015 17:18:46 +0000 (10:18 -0700)
committerDoris Liu <tianliu@google.com>
Thu, 28 May 2015 20:29:44 +0000 (13:29 -0700)
bug: 19126514
Change-Id: I21fe4fd3e2f1240ee31c51f9deac7f285ffe2408

core/java/android/widget/ScrollView.java

index 2709f25..ca57d1a 100644 (file)
@@ -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)) {