首页 > 代码库 > Android View的定位
Android View的定位
引言
今天我们来介绍Android坐标系统和View的定位,当然也会介绍View的滑动相关话题。下面让我们开始介绍吧。
View的基础知识
View是Android中所有控件的基类,无论是TextView、Button、还是RelativeLayout和ListView它们共同的基类都是View。View是一种界面层控件的抽象,它代表了一个控件。ViewGroup翻译过来是控件组的意思,ViewGroup中可以包含多个子控件,即一组View。在Android中ViewGroup也继承自View,这意味着View本身可以是单个控件也可以是由多个控件组成的一组控件。
View的位置参数
View的位置参数主要由它的四个顶点来决定,它们分别对应View的四个属性:top、left、bottom、right。其中top是左上角纵坐标,left是左上角横坐标,bottom是右下角的纵坐标,right是右下角的横坐标。需要注意的是:这些坐标都是相对于View的父容器来说的,这是一种相对坐标。如图所示:
这张图非常清晰的表达了我们刚才表述的View相对位置的内容,我们可以很容易的知道View的宽度就是right-left的值,当然高度就是bottom-top。同时我们可以通过getLeft、getTop、getRight、getBottom来获取left、top、right、bottom的值。
注意点:
从Android 3.0开始,View额外添加了x、y、translationX、translationY。其中x和y是View左上角的坐标,translationX和translationY是View左上角相对于父容器的偏移量。这几个数值也是相对于父容器的坐标,并且translationX和translationY默认值都是0。这几个参数的换算关系如下:
1、x=left+translationX;
2、y=top+translationY;
主要注意的是:View在移动过程中,top和left表示的是原始左上角的位置信息,其值不会发生改变。此时发生改变的是x、y、translationX、translationY。
1、view.getTranslationX计算的是该view的偏移量。初始值为0,向左偏移值为负,向右偏移值为正。
我们还是看图:
我们看到左侧的图片是初始情况下的。这时候translationX和translationY都是0。第二张图我们将View向右侧移动X个位置,我们通过上面的分析知道left、top的值都没有改变。改变的是translationX。
再谈谈rawX和scrollX
rawX是绝对坐标,是相对于屏幕左上角的横坐标,view本身没有getRawX的方法,这个方法一般在MotionEvent对象里使用。
scrollX指的是view在滑动过程中,view的左边缘和view内容的左边缘在水平方向的距离(注意与translationX的区别,translationX指的是view本身的移动,scrollX是view的内容移动),也就是说调用了view的scrollTo或scrollBy方法,view本身不会移动,只会移动view的内容。看图:
Android View的定位