OSDN Git Service

Fix bug where AllApps shadows weren't being completely clipped.
authorJon Miranda <jonmiranda@google.com>
Mon, 7 Nov 2016 23:47:53 +0000 (15:47 -0800)
committerJon Miranda <jonmiranda@google.com>
Tue, 8 Nov 2016 00:01:20 +0000 (16:01 -0800)
Worked fine in normal launcher conditions, but surfaced when
using AllApps in multi-window mode.

Bug: 32176631
Change-Id: Ic973f707a69dd5d8c5eafa0dc2d154aa6ab0e001

src/com/android/launcher3/allapps/HeaderElevationController.java

index ce9837c..7941ac5 100644 (file)
@@ -7,6 +7,7 @@ import android.graphics.Rect;
 import android.graphics.drawable.GradientDrawable;
 import android.os.Build;
 import android.support.v7.widget.RecyclerView;
+import android.util.DisplayMetrics;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewOutlineProvider;
@@ -14,6 +15,7 @@ import android.widget.FrameLayout;
 
 import com.android.launcher3.BaseRecyclerView;
 import com.android.launcher3.R;
+import com.android.launcher3.Utilities;
 
 /**
  * Helper class for controlling the header elevation in response to RecyclerView scroll.
@@ -96,16 +98,16 @@ public abstract class HeaderElevationController extends RecyclerView.OnScrollLis
                 public void getOutline(View view, Outline outline) {
                     final View parent = (View) mHeader.getParent();
 
+                    DisplayMetrics metrics = new DisplayMetrics();
+                    view.getDisplay().getMetrics(metrics);
+                    int offset = Utilities.pxFromDp(mMaxElevation, metrics);
+
                     final int left = parent.getLeft(); // Use the parent to account for offsets
                     final int top = view.getTop();
                     final int right = left + view.getWidth();
                     final int bottom = view.getBottom();
 
-                    outline.setRect(
-                            left - (int) mMaxElevation,
-                            top - (int) mMaxElevation,
-                            right + (int) mMaxElevation,
-                            bottom);
+                    outline.setRect(left - offset, top - offset, right + offset, bottom);
                 }
             };
             mHeader.setOutlineProvider(vop);