and*_*idu 5 android popupwindow
我有一个自定义的ImageView,在OnDraw中我添加了一些位图叠加.我可以使用OnTouchEvent回调中的action up type事件捕获任何叠加的click事件.我要显示一个弹出窗口,我必须提供弹出窗口显示的视图锚点,但我使用位图作为锚点而非特定视图,所以我被卡住了.关于这个问题我在网上找不到任何解决办法.传递父ImageView并添加叠加xy偏移(使用Gravity.NO_GRAVITY)不会产生所需的结果(窗口箭头也不会正确指向).
问题是该函数的x/y参数相对于锚视图所属的Window是偏移的.你可以从函数的源代码中清楚地看到它,除了它的窗口标记之外,没有使用'parent'.
public void showAtLocation(View parent, int gravity, int x, int y) {
showAtLocation(parent.getWindowToken(), gravity, x, y);
}
Run Code Online (Sandbox Code Playgroud)
因此,要使偏移良好,您必须确定锚点相对于窗口的位置.
为此,请使用
Rect rc = new Rect();
View.getWindowVisibleDisplayFrame(rc);
int[] xy = new int[2];
View.getLocationInWindow(xy);
rc.offset(xy[0], xy[1]);
Run Code Online (Sandbox Code Playgroud)
现在你有
inx x = rc.left, y = rc.top;
Run Code Online (Sandbox Code Playgroud)
这是ImageView的左上角相对于其窗口的点.
最后在相对于此点的位置显示您的PopupWindow,它应该在ImageView上正确显示.
| 归档时间: |
|
| 查看次数: |
6220 次 |
| 最近记录: |