View是Android中全部控件的基类,无论是简单的Button和TextView,仍是复杂的RelativeLayout和ListView,其基类都是View类;ViewGroup也继承了View类,这意味着View自己就能够表明简单的和复杂的全部控件和布局,经过这种关系,就造成了View树的结构。数组
在操做View的时候,尤为是在处理自定义View的一些事件的时候,咱们每每须要获取到目标View的这样或那样的参数。下面就来简单介绍一下View的各类参数及其用法。布局
View有这样的一些属性:x、y、z、left、right、top、bottom、elevation、translationX、translationY、translationZ、rawX、rawY等等,下面一一介绍这些参数的意义及如何获取这些参数。动画
这里须要注意一点:如下方法,若是直接在Activity的onCreate()方法中调用,则可能会返回0,这是由于在程序刚刚启动,刚刚开始绘制这个View的时候,咱们就要获取这个View的各个位置参数,固然会返回0。解决方法是:在Activity的 onWindowFocusChanged() 方法中获取;或者能够新建一个线程,先 Thread.sleep() 一段时间以后,再获取这些参数。spa
这五个参数表明的是View的原始位置相对于其父控件边缘的距离:线程
left、right、top和bottom四个属性的关系以下图所示:code
注意:View的这五个属性值表明的是View的原始位置坐标值,不管这个View被移动到了什么位置,或者被缩放、旋转了多少,这五个值都是永久不变的。blog
这三个参数表明的是在动画或者滑动View的时候,View的当前位置相对于其原始位置平移的距离:继承
这三个参数表明的是View的当前位置相对于其父控件的距离:事件
这三个参数和前面的几个参数的关系公式以下:get
MotionEvent是咱们用来操做View的触摸事件的类,当咱们对屏幕进行一次操做的时候,就会触发MotionEvent中的几个触摸事件:
所以,对于咱们经常作的一些操做,相应的事件触发顺序以下:
使用MotionEvent类,咱们还能够获取到触摸屏幕时View的一些位置参数:
这里说的View相对屏幕的距离,是指View的左上角相对于手机屏幕左上角的坐标。能够使用如下几个方法获取:
这个方法的用法代码以下:
int[] position = new int[2]; view.getLocationInWindow(position); System.out.println("(" + position[0] + "," + position[1] + ")");
若是当前Activity是普通的Activity,则用这个方法获得的position数组中的第二个参数(Y坐标值)表示可见的状态栏的高度 + 可见的标题栏的高度 + View上端到标题栏下端的距离;
若是当前Activity是对话框式的Activity,则Y坐标值表示可见的标题栏的高度 + View上端到标题栏下端的距离。
注意:这里的“可见”表示的是能看到的,若是一个Activity中的状态栏或标题栏被隐藏了,则其高度用0表示。
这个方法的用法代码以下:
int[] position = new int[2]; view.getLocationOnScreen(position); System.out.println("(" + position[0] + "," + position[1] + ")");
这个方法对Y坐标的要求和上面的方法相同。
这个方法的用法代码以下:
Rect rect = new Rect(); view.getGlobalVisibleRect(rect); System.out.println("(" + rect.left + "," + rect.top + ")");
Rect在这里的做用是“套住”这个View,其对Y坐标的要求和上面的方法相同。