什么是View?
Android.app.View 就是手机的UI,View 负责绘制UI,处理事件(evnet),Android 利用 View 打造出所 Widgets,利用 Widget 可打造出互动式的使用者介面,每个View 负责一定区域的绘制。
View 坐标的基本概念
View的宽高是有top、left、right、bottom参数决定的 而X,Y和translationX,和translationY则负责View位置的改变。
从Android3.0开始,加入了translation的概念,即相对于父容器的偏移量以及X,Y坐标的概念,X,Y代表左上顶点的横纵坐标。当View在发生平移时,getX,getY,setX,setY
get/setTranslationX/Y来获得当前左上点的坐标。
X=left+translationX Y同理。
注意:在View发生改变的过程中,top,left等值代表原始位置,是不会改变的。改变的只有X,Y,translationX/Y。
View绘制
View绘制机制:
view树的绘制流程、measure、layout、draw
view树的绘制流程:
measure<是否重新计算视图大小> --->layout<是否重新安置视图位置>----->draw<是否需要重绘> 是一个递归过程
---measure测量:树的递归过程,自上而下有序进行遍历
参数
1、ViewGroup.LayoutParams:设置宽高
2、MeasureSpec:测量规格,包含两种,一种是测量它的模式;第二种是在这种模式下测量的大小。
重要方法
1、measure:最终还是调用了onMeasure方法
2、onMeasure:测量逻辑的方法,两个参数,宽高的测量规格。抽象方法,需要自定义。
3、setMeasuredDimension():将测量好的规格,完成整个测量过程
layout:树的递归过程,自上而下有序进行遍历。根据测量的尺寸来摆放子视图的位置。
1、layout:最终调用onLayout方法
2、onLayout:抽象方法,需要自定义。分垂直方向和水平方向的布局。
---onDraw:
---两个容易混淆的方法<回调>:
1、invalidate():请求系统,如果视图没有发生变化就不会绘制。
2、requestLayout():当布局发生变化的时候<方向、尺寸>会调用,它就会去出发measure和layout方法,但是它不会调用draw方法。