在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()。
427

被折叠的 条评论
为什么被折叠?



