我正在实施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 坐标。