36

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

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

4

3 回答 3

70

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

MotionEvent.getRawX()

MotionEvent.getRawY()

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

于 2009-09-12T09:36:09.967 回答
37

这是对 Android 平台的限制。

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

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

这意味着在实践中getX()并且getY()对于许多用例来说是无用的,并且您应该基于您的应用程序逻辑getRawX()并且getRawY()保证返回相对于设备屏幕的绝对坐标。

于 2009-09-17T10:34:53.433 回答
4

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

解决方案在这里讨论:

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

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

于 2010-01-06T06:36:17.133 回答