我有自定义ImageView,在OnDraw中我添加了一些位图叠加。我可以使用OnTouchEvent回调中的action up type事件捕获任何叠加的click事件。我需要显示一个弹出窗口,我必须为弹出窗口提供一个视图锚点,但我使用位图作为锚点不是特定视图,所以我被卡住了。关于这个问题我在网上找不到任何解决办法。传递父ImageView并添加叠加x-y偏移(使用Gravity.NO_GRAVITY)不会产生所需的结果(窗口箭头也不会正确指向)。
答案 0 :(得分:6)
问题是该函数的x / y参数相对于锚视图所属的Window是偏移的。你可以从函数的源代码中清楚地看到它,除了它的窗口标记之外,没有使用'parent'。
public void showAtLocation(View parent, int gravity, int x, int y) {
showAtLocation(parent.getWindowToken(), gravity, x, y);
}
因此,为了使你的偏移更好,你必须确定锚点相对于窗口的位置。
为此,请使用
Rect rc = new Rect();
View.getWindowVisibleDisplayFrame(rc);
int[] xy = new int[2];
View.getLocationInWindow(xy);
rc.offset(xy[0], xy[1]);
现在你有了
inx x = rc.left, y = rc.top;
这是ImageView左上角相对于窗口的点。
最后在相对于此点的位置显示PopupWindow,它应该在ImageView上正确显示。
答案 1 :(得分:2)
你指的是以下类型的观点...我建议你按照下面的链接,并在你的情况下实现相同的..如果发现你的评论很困难,你会回复给你。{ {3}}