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