在Android中处理触摸事件时,MotionEvent
提供了几个方法来获取触摸点的坐标,其中两个最常用的是getX()
和getRawX()
。这两个方法的主要区别在于它们参考的坐标系统不同:
-
getX()
- 这个方法返回的是触摸点相对于当前
View
左上角的坐标。换句话说,它是基于View
内部的局部坐标系统。如果View
位于屏幕的其他位置,或者因为滚动而移动过,那么getX()
和getY()
会反映相对于View
本身的位置,而不是屏幕的绝对位置。
- 这个方法返回的是触摸点相对于当前
-
getRawX()
- 相比之下,
getRawX()
和getRawY()
返回的是触摸点相对于设备屏幕左上角的坐标,不考虑任何View
的边界或滚动。这意味着无论View
在屏幕上的实际位置如何,getRawX()
都将给出相对于整个屏幕的绝对坐标。
- 相比之下,
举例说明:
假设有一个Button
位于屏幕中央,并且屏幕分辨率是1080x1920像素,Button
的坐标是(200, 300)像素(左上角为原点)。如果用户在Button
的中心点击,以下情况会发生:
- 使用
getX()
,返回的X坐标将是Button
宽度的一半,因为这是相对于Button
左上角的坐标。如果Button
宽100像素,那么getX()
可能返回大约50。 - 使用
getRawX()
,返回的X坐标将是屏幕左上角到Button
中心的实际距离。在这个例子中,getRawX()
将返回大约250(200 + 50),因为它包括了Button
自身的左边界和Button
内部点击点的坐标。
因此,选择使用哪一个取决于你的需求。如果你需要知道触摸点相对于View
的位置,使用getX()
和getY()
;如果你需要知道触摸点在整个屏幕上的确切位置,使用getRawX()
和getRawY()
。