From 5de7e15c9b3735a9932ed5aa36ab7ae9415ffeab Mon Sep 17 00:00:00 2001 From: Louis Kirsch Date: Mon, 1 Apr 2019 17:34:51 +0200 Subject: [PATCH 1/2] Take decor padding into account when locating a view --- .../co/deanwild/materialshowcaseview/target/ViewTarget.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/uk/co/deanwild/materialshowcaseview/target/ViewTarget.java b/library/src/main/java/uk/co/deanwild/materialshowcaseview/target/ViewTarget.java index 8595a2ae..c0c85073 100644 --- a/library/src/main/java/uk/co/deanwild/materialshowcaseview/target/ViewTarget.java +++ b/library/src/main/java/uk/co/deanwild/materialshowcaseview/target/ViewTarget.java @@ -22,8 +22,9 @@ public ViewTarget(int viewId, Activity activity) { public Point getPoint() { int[] location = new int[2]; mView.getLocationInWindow(location); - int x = location[0] + mView.getWidth() / 2; - int y = location[1] + mView.getHeight() / 2; + View decor = ((Activity) mView.getContext()).getWindow().getDecorView(); + int x = location[0] - decor.getPaddingLeft() + mView.getWidth() / 2; + int y = location[1] - decor.getPaddingTop() + mView.getHeight() / 2; return new Point(x, y); } From 2d037cad55e41268e3627947a7ba95733b81ddb3 Mon Sep 17 00:00:00 2001 From: Louis Kirsch Date: Mon, 1 Apr 2019 17:47:02 +0200 Subject: [PATCH 2/2] Handle context wrappers --- .../materialshowcaseview/target/ViewTarget.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/uk/co/deanwild/materialshowcaseview/target/ViewTarget.java b/library/src/main/java/uk/co/deanwild/materialshowcaseview/target/ViewTarget.java index c0c85073..32fbc636 100644 --- a/library/src/main/java/uk/co/deanwild/materialshowcaseview/target/ViewTarget.java +++ b/library/src/main/java/uk/co/deanwild/materialshowcaseview/target/ViewTarget.java @@ -1,6 +1,8 @@ package uk.co.deanwild.materialshowcaseview.target; import android.app.Activity; +import android.content.Context; +import android.content.ContextWrapper; import android.graphics.Point; import android.graphics.Rect; import android.view.View; @@ -22,12 +24,23 @@ public ViewTarget(int viewId, Activity activity) { public Point getPoint() { int[] location = new int[2]; mView.getLocationInWindow(location); - View decor = ((Activity) mView.getContext()).getWindow().getDecorView(); + View decor = getActivity(mView).getWindow().getDecorView(); int x = location[0] - decor.getPaddingLeft() + mView.getWidth() / 2; int y = location[1] - decor.getPaddingTop() + mView.getHeight() / 2; return new Point(x, y); } + private Activity getActivity(View view) { + Context context = view.getContext(); + while (context instanceof ContextWrapper) { + if (context instanceof Activity) { + return (Activity)context; + } + context = ((ContextWrapper)context).getBaseContext(); + } + return null; + } + @Override public Rect getBounds() { int[] location = new int[2];