MeasureSpec类
是一个32位int值 高2位为测量模式 低30位为测量的大小测量模式
EXACTLY(精确模式)
当属性为具体值时,系统使用的模式AT_MOST(最大值模式)
当属性为wrap_content时UNSPECIFIED(未指明的)
View的测量
- 重写on Measure( )方法
系统最终会调用setMeasuredDimension(int widthMeasureSpec, int heightMeasureSpec)方法
ViewGroup的测量
当ViewGroup属性为wrap_content时会遍历子View,获得所有子View的大小,从而决定自己的大小,其它模式会通过具体值来设置自身的大小
测量完毕后确定位置也同样是遍历调用子View的layout( )方法并指定其具体显示位置,从而决定其布局的位置
自定义ViewGroup需要重写onlayout( )方法来控制其子View显示位置逻辑,如果需要支持wrap_content属性需重写onMeasure( )方法
View的绘制
onDraw(Canvas canvas)方法
ViewGroup的绘制
一般不需要,但会调用ViewGroup的dispatchDraw( )方法来绘制其子View,过程还是遍历子View,调用子View的绘制方法来完成绘制