diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 8993978614..4d63c960a4 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -312,6 +312,11 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo } } + @Override + public int getCanvasClipTopForOverscroll() { + return mHeader.getTop(); + } + private void rebindAdapters(boolean showTabs) { rebindAdapters(showTabs, false /* force */); } diff --git a/src/com/android/launcher3/views/SpringRelativeLayout.java b/src/com/android/launcher3/views/SpringRelativeLayout.java index 5022d65a30..892c59f272 100644 --- a/src/com/android/launcher3/views/SpringRelativeLayout.java +++ b/src/com/android/launcher3/views/SpringRelativeLayout.java @@ -85,12 +85,24 @@ public class SpringRelativeLayout extends RelativeLayout { invalidate(); } + /** + * Used to clip the canvas when drawing child views during overscroll. + */ + public int getCanvasClipTopForOverscroll() { + return 0; + } + @Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { if (mDampedScrollShift != 0 && mSpringViews.get(child.getId())) { + int saveCount = canvas.save(); + + canvas.clipRect(0, getCanvasClipTopForOverscroll(), getWidth(), getHeight()); canvas.translate(0, mDampedScrollShift); boolean result = super.drawChild(canvas, child, drawingTime); - canvas.translate(0, -mDampedScrollShift); + + canvas.restoreToCount(saveCount); + return result; } return super.drawChild(canvas, child, drawingTime);