From b8ca1aa7eeb15082331bc9eb47c09aacc6f82e5c Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Thu, 14 Jun 2018 15:57:59 -0700 Subject: [PATCH] Add hard clip for overscrolled children to not be visible above QSB. We lose the RecyclerView fading edge, but this is the simplest/less risky solution. Change-Id: I7aa39a33678ed8a9b9cf9f17c9ad8c14707b0299 --- .../launcher3/allapps/AllAppsContainerView.java | 5 +++++ .../launcher3/views/SpringRelativeLayout.java | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) 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);