gpt4 book ai didi

Android - 更正 onTouchEvent() 中状态栏的高度

转载 作者:行者123 更新时间:2023-11-29 16:10:15 26 4
gpt4 key购买 nike

我在 onTouchEvent(MotionEvent event) 中响应自定义 View 内的触摸事件。我遇到坐标不一致的问题:event.getRaw(Y) 返回触摸的 Y 坐标,包括状态栏,但 myView.getTop() 返回 View 顶部的 Y 坐标,不包括状态栏。我已采用以下技巧来更正状态栏的高度:

// Get the size of the visible window (which excludes the status bar)
Rect rect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);

// Get the coordinates of the touch event, subtracting the top margin
final int x = (int) event.getRawX();
final int y = (int) event.getRawY() - rect.top;

有没有更好的解决方案?

最佳答案

如果您只关心相对于父 View 的坐标(例如,您希望始终假设 View 的左上角为 0,0),则可以只使用 getX() 和 getY() 而不是它们的原始等价物。

否则,基本上您是在尝试获取相对于屏幕的 X/Y(getRawX、getRawY)并将它们转换为相对于窗口的 X/Y 坐标(状态栏不是窗口的一部分)。

您当前的解决方案可以工作,但是 as discussed elsewhere , getWindowVisibileDisplayFrame 过去有点破。一种更安全的方法可能是确定 View 在窗口中的位置,然后使用相对于该 View 的 x/y 坐标。

int[] coords = new int[2];
myView.getLocationInWindow(coords);

final int x = event.getRawX() - coords[0];
final int y = event.getRawY() - coords[1];

关于Android - 更正 onTouchEvent() 中状态栏的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14060244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com