View的getX和getY

Android坐标系和视图坐标系

Android中有两种坐标系,分别称之为Android坐标系和视图坐标系。而对应的也有一些相关的方法可以获取坐标系中的坐标值。

Android坐标系

先来看一看Android坐标系是个什么样子的。贴一张图来说明,如下:

image

如上图所示,Android坐标系以手机屏幕左上角的顶点为坐标原点,从该点向右为x轴正方向,从该点向下为y轴正方向。而触控事件中,使用getRawX()和getRawY()方法

获取的坐标就是以这个坐标系为标准下的坐标值。

视图坐标系

android中的另外一个坐标系叫做视图坐标系,它描述的是子视图在父视图中的位置。再贴一张图来说明,如下:

image

如上图所示,视图坐标系是以父视图的左上角为坐标原点的。相应的原点向右为x轴正方向,原点向下为y轴正方向。在触控中,通过

getX()和getY()来获取的坐标值就是视图坐标系中的坐标值。

View的getX和getY

View 提供了如下 5 种方法获取 View 的坐标:
1 . View.getTop()、View.getLeft()、View.getBottom()、View.getRight();//相对父容器
2 . View.getX()、View.getY();//getX()==getLeft()、getY==getTop()。
3 . View.getTranslationX()、View.getTranslationY();
4 . View.getLocationOnScreen(int[] position);//一个控件在其父窗口中的坐标位置,在当前窗口内的绝对坐标
5 . View.getLocationInWindow(int[] position);//一个控件在其整个屏幕上的坐标位置
初学View时见到这个多个方法可能有点懵逼,下面我来根据编号一一介绍:
1. 这四个方法用于获取View相对于父容器的坐标,如下图

图1.1

从上图可知,可根据View的这四个坐标来获取View的大小:

1 .View的Height值 = view.getBottom() - view.getTop();
2 .View的Width值 = view.getRight() - view.getLeft();

需要注意的是,这四个方法获取的坐标表示的是View原始状态时相对于父容器的坐标,对View进行平移操作并不会改变着四个方法的返回值。

2 . getX()与getY()方法获取的是View左上角相对于父容器的坐标,当View没有发生平移操作时,getX()==getLeft()、getY==getTop()。
3 . translationX与 translationY是View左上角相对于父容器的偏移量:translationX = getX() - getLeft(),当View未发生平移操作时,translationX 与translationY都为0。
4 . 获取View相对于整个屏幕的坐标。
5 . 获取View相对于Window的坐标(忽略状态栏及ActionBar)。

上面介绍的是View获取坐标的几种方法,但是在实际开发中不仅需要获取View的坐标,有时候还需要获取用户点击时的坐标。

MotionEvent的getX和getY

MotionEvent提供的方法:

getX() 获取点击事件距离控件左边的距离,即视图坐标

getY() 获取点击事件距离控件顶边的距离,即视图坐标

getRawX() 获取到的是点击事件距离整个屏幕左边的距离,即绝对坐标

getRawY() 获取到的是点击事件距离整个屏幕顶边的距离,即绝对坐标

getScrollY() 获取 视图坐标原点 到 视图 滚出屏幕 的距离

getScrollX() 类似 同上

getX()和getY()获取到的是相对于当前View左上角的坐标; getRawX和getRawY()获取的是相对于屏幕左上角的坐标。 如下图:

image.png

你可能感兴趣的:(View的getX和getY)