diff options
Diffstat (limited to 'src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java')
-rw-r--r-- | src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java index 8a8afde51..1c51ab763 100644 --- a/src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java @@ -17,7 +17,9 @@ package com.android.launcher3.allapps; import android.content.Context; import android.graphics.Bitmap; +import android.graphics.Canvas; import android.util.AttributeSet; +import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import com.android.launcher3.BubbleTextView; @@ -25,6 +27,7 @@ import com.android.launcher3.BubbleTextView.BubbleTextShadowHandler; import com.android.launcher3.ClickShadowView; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; +import com.android.launcher3.R; /** * A container for RecyclerView to allow for the click shadow view to be shown behind an icon that @@ -34,6 +37,7 @@ public class AllAppsRecyclerViewContainerView extends FrameLayout implements BubbleTextShadowHandler { private final ClickShadowView mTouchFeedbackView; + private View mPredictionBarView; public AllAppsRecyclerViewContainerView(Context context) { this(context, null); @@ -57,6 +61,13 @@ public class AllAppsRecyclerViewContainerView extends FrameLayout } @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + mPredictionBarView = findViewById(R.id.prediction_bar); + } + + @Override public void setPressedIcon(BubbleTextView icon, Bitmap background) { if (icon == null || background == null) { mTouchFeedbackView.setBitmap(null); @@ -66,4 +77,33 @@ public class AllAppsRecyclerViewContainerView extends FrameLayout mTouchFeedbackView.animateShadow(); } } + + /** + * This allows us to have custom drawing order, while keeping touch handling in correct z-order. + */ + @Override + protected void dispatchDraw(Canvas canvas) { + final long drawingTime = getDrawingTime(); + + // Draw the click feedback first (since it is always on the bottom) + if (mTouchFeedbackView != null && mTouchFeedbackView.getVisibility() == View.VISIBLE) { + drawChild(canvas, mTouchFeedbackView, drawingTime); + } + + // Then draw the prediction bar, since it needs to be "under" the recycler view to get the + // right edge effect to be drawn over it + if (mPredictionBarView != null && mPredictionBarView.getVisibility() == View.VISIBLE) { + drawChild(canvas, mPredictionBarView, drawingTime); + } + + // Draw the remaining views + int childCount = getChildCount(); + for (int i = 0; i < childCount; i++) { + View v = getChildAt(i); + if (v != mTouchFeedbackView && v != mPredictionBarView && + v.getVisibility() == View.VISIBLE) { + drawChild(canvas, v, drawingTime); + } + } + } } |