我正在实现 OnTouchListener 并且正在接收MotionEvent对象。一些 ACTION_MOVE 事件报告绝对X / Y坐标,而一些报告相对坐标。

我怎样才能问 MotionEvent 它目前代表什么样的坐标?

有帮助吗?

解决方案

您可能希望将这些用于绝对坐标(绝对值,关于设备的屏幕):

MotionEvent.getRawX()

MotionEvent.getRawY()

其他方法 getX() getY()应返回相对于调度它们的 View 的坐标。

其他提示

这是对Android平台的限制。

MotionEvent 有时会返回相对于视图的绝对X和Y坐标,有时会返回前一个运动事件的相对坐标。

ACTION_DOWN 发送的事件始终是绝对的,所有其他事件都会有所不同。无法向 MotionEvent 询问当前的坐标类型。

这意味着在实践中 getX() getY()对于许多用例都没用,你应该将你的应用程序逻辑基于 getRawX() getRawY(),保证相对于设备屏幕返回绝对坐标。

使用MapView时,我能够通过从MotionEvent.getRawX()中减去Window的内容视图(Window.ID_ANDROID_CONTENT)的View.getLeft()和View.getTop()来获取相对的X和Y坐标。和MotionEvent.getRawY()分别。

这里讨论解决方案:

http://andmobidev.blogspot.com/2010/01/getting-relative-coordinates-from.html

这应该用于确定主布局视图中的相对X和Y坐标。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top