题
我正在实现 OnTouchListener
并且正在接收MotionEvent对象。一些 ACTION_MOVE
事件报告绝对X / Y坐标,而一些报告相对坐标。
我怎样才能问 MotionEvent
它目前代表什么样的坐标?
解决方案
您可能希望将这些用于绝对坐标(绝对值,关于设备的屏幕):
其他方法 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坐标。
不隶属于 StackOverflow