5

我有一个自定义 ImageView 并在 OnDraw 中添加了一些位图叠加层。我可以使用 OnTouchEvent 回调中的操作向上类型事件来捕获任何叠加层的点击事件。问题是我要显示一个弹出窗口,我必须为弹出窗口提供一个视图锚以显示,但我使用位图作为锚而不是特定视图,所以我被卡住了。我在网上找不到有关此问题的任何解决方案。传递父 ImageView 并添加覆盖 xy 偏移(使用 Gravity.NO_GRAVITY)不会产生所需的结果(窗口箭头也不会正确指向)。在此处输入图像描述

4

2 回答 2

6

使用PopupWindow.showAtLocation

问题是该函数中的 x/y 参数相对于锚视图所属的窗口偏移。您可以从函数的源代码中清楚地看到它,除了它的窗口令牌之外,没有使用来自“父”的任何内容。

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 顶部。

于 2013-06-05T09:24:01.137 回答
2

您指的是以下类型的视图...我建议您按照以下链接并在您的情况下也实施相同的操作..如果发现困难发表您的评论并会回复您.. MAPViewBallons

于 2013-06-12T05:17:24.113 回答