Android系统中有两种坐标系, 分别为Android坐标系和View坐标系。 了解这两种坐标系能够帮助我们
实现View的各种操作, 比如我们要实现View的滑动, 你连这个View的位置都不知道, 那如何去操作呢? 首
先我们来看看Android坐标系。

1.Android坐标系

在Android中, 将屏幕左上角的顶点作为Android坐标系的原点, 这个原点向右是X轴正方向, 向下是Y

轴正方向, 如图所示。 另外在触控事件中, 使用getRawX() 和getRawY() 方法获得的坐标也是

Android坐标系的坐标

Android 两个view坐标差 安卓坐标系_Android 两个view坐标差

2.View坐标系

除了Android坐标系, 还有一个坐标系: View坐标系, 它与Android坐标系并不冲突, 两者是共同存在

的, 它们一起来帮助开发者更好地控制View。 对于View坐标系, 我们只需要搞明白图3-4中提供的信息就好

了。

Android 两个view坐标差 安卓坐标系_点击事件_02

View获取自身的宽和高
根据图可以得到很多结论, 首先我们能算出View的宽和高:
 

width=getRight()-getLeft();
height=getBottom()-getTop();

当然这样做显然有些麻烦, 因为系统已经向我们提供了获取View宽和高的方法。 getHeight() 用来获
取 View 自身的高度, getWidth() 用来获取 View 自身的宽度。 从 View 的源码来看, getHeight() 和
getWidth() 获取View自身的高度和宽度的算法与上面从图 中得出的结论是一致的。 View源码中的
getHeight() 方法和getWidth() 方法如下所示

public final int getHeight(){
    reture mBottom-mTop;
}

public final int getWidth(){
    reture mRight-mLeft;
}

View自身的坐标
通过如下方法可以获得View到其父控件(ViewGroup) 的距离。
• getTop() : 获取View自身顶边到其父布局顶边的距离。
• getLeft() : 获取View自身左边到其父布局左边的距离。
• getRight() : 获取View自身右边到其父布局左边的距离。
• getBottom() : 获取View自身底边到其父布局顶边的距离。

 

MotionEvent提供的方法
图中间的那个圆点, 假设就是我们触摸的点。 我们知道无论是View还是ViewGroup, 最终的点击事
件都会由onTouchEvent(MotionEvent event) 方法来处理。 MotionEvent在用户交互中作用重大, 其内部提
供了很多事件常量, 比如我们常用的ACTION_DOWN、 ACTION_UP和ACTION_MOVE。 此外,
MotionEvent也提供了获取焦点坐标的各种方法。
• getX() : 获取点击事件距离控件左边的距离, 即视图坐标。
• getY() : 获取点击事件距离控件顶边的距离, 即视图坐标。
• getRawX() : 获取点击事件距离整个屏幕左边的距离, 即绝对坐标。
• getRawY() : 获取点击事件距离整个屏幕顶边的距离, 即绝对坐标。
 

该文章摘抄,只为帮助更多的小伙伴,如有侵权请联系,立即删除.