View事件体系之View坐标系图示理解
2018-03-25 本文已影响112人
芒果味的你呀
1.什么是View、ViewGroup?
View是Android中所有控件的基类,ViewGroup,从翻译上看是控件组,它的内存包含了许多个控件,即一组View。在Android的设计中,ViewGroup也是继承View的,也就是View本身就是可以是单个控件也可以是由多个控件组成的一组控件
。比如Button显然是一个View,而LinearLayout不但是一个View而且是一个ViewGroup,而ViewGroup内部是可以有子View的,而这个子View同样还可以是ViewGroup。
2.View的位置参数
【这个我自己有时候会弄混,趁这个机会,自己画一画。加深印象】
【View的位置参数】主要由它的四个顶点来决定,分别对应View的四个属性:top、left、right、bottom,其中top是左上角纵坐标,left是左上角横坐标,right是右下角横坐标,bottom是右下角纵坐标。这些坐标都是相对于View的父容器
来说,所以是相对坐标
。然后基础一点我们需要知道,在Android中,x轴和y轴的正方向分别为右和下。
带着上面的理解,我们去看View的坐标。
view坐标关于view坐标的四个参数的获取:getLeft(),getTop(),getRight(),getBottom()
left=getLeft();
top=getTop();
right=getRight();
bottom=getBottom();
关于view宽高的获取:
width=getWidth();
height=getHeight();
同时我们也可以看到坐标和view宽高的关系
width=right-left;
height=bottom-top;
3.进一步我们去理解MotionEvent的坐标
在手指接触屏幕后会产生一系列的事件,比如ACTION_DOWN、ACTION_UP、ACTION_MOVE。在这个过程中我们可以通过MotionEvent得到点击事件的x,y坐标。为此,系统提供了两组方法
* getX/getY:当前View(相对于父)左上角的x和y坐标
* getRawX/getRawY:相对于手机屏幕左上角的x和y坐标
如图:
关于MotionEvent坐标的获取:getX(),getY(),getRawX(),getRawY()
MotionEvent的坐标4.最后关于x,y,translationX,translationY
这几个新添加的额外参数,其中x 和y 是view左上角的坐标,translationX和translationY是view左上角相对于父容器的偏移量,这四个参数也是相对于父容器的坐标。需要注意的是View在平移过程中,top和left表示的是原始左上角的位置信息,其值不会发生改变,发生改变的是x,y,translationX,translationY这三个参数。
x=left+translationX;
y=top+translationY;