我怎么知道MotionEvent是相对的还是绝对的?

时间:2009-09-11 13:31:51

标签: android touch

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

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

3 个答案:

答案 0 :(得分:67)

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

MotionEvent.getRawX()

MotionEvent.getRawY()

其他方法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坐标。