Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在没有锚定视图的特定坐标处弹出窗口_Android_Popupwindow - Fatal编程技术网

Android 在没有锚定视图的特定坐标处弹出窗口

Android 在没有锚定视图的特定坐标处弹出窗口,android,popupwindow,Android,Popupwindow,我有一个自定义的ImageView,在OnDraw中我添加了一些位图覆盖。我可以使用OnTouchEvent回调中的action-up-type事件捕获任何覆盖的click事件。对于我来说,要显示一个弹出窗口,我必须为弹出窗口提供一个视图锚点,以便显示,但我使用位图作为锚点,而不是特定视图,因此我被卡住了。我在网上找不到关于这个问题的任何解决办法。传递父ImageView并添加叠加x-y偏移(使用重力。无重力)不会产生所需的结果(窗口箭头也不会正确指向) 使用 问题在于,该函数中的x/y参数相对

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

使用

问题在于,该函数中的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顶部。

您指的是下面的一种视图。我建议您按照下面的链接,并在您的案例中实施相同的操作。如果发现您的评论有困难,我们会回复您。

如何显示弹出窗口?使用showAtLocation(查看父项,int gravity,int xOffset,int yOffset);这应该可以工作,可能您的偏移量错误?由于新用户状态,无法发布图像,请参阅链接Marci Căşvan