From d70026e37611f635684e4beb0581b48e68adfd0a Mon Sep 17 00:00:00 2001 From: Samuel Wall Date: Sat, 1 Oct 2016 12:46:40 +0100 Subject: [PATCH] Fixed clip bounds being incorrectly calculated #10 --- .../MaterialTapTargetPrompt.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/library/src/main/java/uk/co/samuelwall/materialtaptargetprompt/MaterialTapTargetPrompt.java b/library/src/main/java/uk/co/samuelwall/materialtaptargetprompt/MaterialTapTargetPrompt.java index 904b6667..4150b3b9 100644 --- a/library/src/main/java/uk/co/samuelwall/materialtaptargetprompt/MaterialTapTargetPrompt.java +++ b/library/src/main/java/uk/co/samuelwall/materialtaptargetprompt/MaterialTapTargetPrompt.java @@ -84,7 +84,7 @@ public class MaterialTapTargetPrompt ViewGroup mParentView; boolean mParentViewIsDecor; ViewGroup mClipToView; - final float mStatusBarHeight; + final float mStatusBarHeight, mScreenHeight; final ViewTreeObserver.OnGlobalLayoutListener mGlobalLayoutListener; boolean mAutoDismiss, mAutoFinish; @@ -121,6 +121,7 @@ public void onPromptTouched(MotionEvent event, boolean tappedTarget) Rect rect = new Rect(); mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); mStatusBarHeight = rect.top; + mScreenHeight = rect.bottom + mStatusBarHeight; mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { @@ -656,14 +657,17 @@ void updateClipBounds() if (mClipToView != null) { mView.mClipBounds = true; - mView.mClipBoundsLeft = mClipToView.getLeft(); - mView.mClipBoundsBottom = mClipToView.getBottom(); - mView.mClipBoundsTop = mClipToView.getTop(); - mView.mClipBoundsRight = mClipToView.getRight(); - if (mParentViewIsDecor) + + final int[] location = new int[2]; + mClipToView.getLocationOnScreen(location); + mView.mClipBoundsLeft = location[0]; + mView.mClipBoundsBottom = location[1] + mClipToView.getHeight(); + mView.mClipBoundsTop = location[1]; + mView.mClipBoundsRight = location[0] + mClipToView.getWidth(); + + if (mClipToView.getHeight() == mScreenHeight || (mParentViewIsDecor && mView.mClipBoundsTop == 0)) { mView.mClipBoundsTop += mStatusBarHeight; - mView.mClipBoundsBottom += mStatusBarHeight; } } else if (mParentViewIsDecor) @@ -672,7 +676,7 @@ else if (mParentViewIsDecor) //Stop the canvas drawing over the status bar mView.mClipBoundsTop = mStatusBarHeight; mView.mClipBoundsLeft = 0f; - mView.mClipBoundsBottom = mActivity.getResources().getDisplayMetrics().heightPixels - mStatusBarHeight; + mView.mClipBoundsBottom = mActivity.getResources().getDisplayMetrics().heightPixels; mView.mClipBoundsRight = mActivity.getResources().getDisplayMetrics().widthPixels; } else