PopupWindow在特定坐标处没有锚点视图

时间:2013-05-29 11:53:11

标签: android popupwindow

我有自定义ImageView,在OnDraw中我添加了一些位图叠加。我可以使用OnTouchEvent回调中的action up type事件捕获任何叠加的click事件。我需要显示一个弹出窗口,我必须为弹出窗口提供一个视图锚点,但我使用位图作为锚点不是特定视图,所以我被卡住了。关于这个问题我在网上找不到任何解决办法。传递父ImageView并添加叠加x-y偏移(使用Gravity.NO_GRAVITY)不会产生所需的结果(窗口箭头也不会正确指向)。 enter image description here

2 个答案:

答案 0 :(得分:6)

使用PopupWindow.showAtLocation

问题是该函数的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}}