我正在实施OnTouchListener
并正在接收 MotionEvent 对象。一些ACTION_MOVE
事件报告绝对 X/Y 坐标,而一些报告相对坐标。
我怎么能问MotionEvent
它当前代表什么样的坐标?
您可能希望将这些用于绝对坐标(绝对,关于设备的屏幕):
其他方法getX()
和getY()
应该返回相对于View
发送它们的坐标。
这是对 Android 平台的限制。
MotionEvent
有时会返回相对于视图的绝对 X 和 Y 坐标,有时会返回前一个运动事件的相对坐标。
发送的事件ACTION_DOWN
始终是绝对的,所有其他事件都会有所不同。无法询问MotionEvent
当前坐标类型。
这意味着在实践中getX()
并且getY()
对于许多用例来说是无用的,并且您应该基于您的应用程序逻辑getRawX()
并且getRawY()
保证返回相对于设备屏幕的绝对坐标。
使用 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 坐标。