view的工作流程主要是指measure,layout,draw这三大流程,即测量,布局和绘制,其中measure确定View的测量宽/高,layout确定view的最终宽/高和四个顶点的位置,而draw将view绘制到屏幕上。
measure方法是一个final类型的方法,即子类不能够重写此方法,在view的measure方法中会调用view的onMeasure方法,
PRotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); }public static int getDefaultSize(int size, int measureSpec) { int result = size; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); switch (specMode) { case MeasureSpec.UNSPECIFIED: result = size; break; case MeasureSpec.AT_MOST: case MeasureSpec.EXACTLY: result = specSize; break; } return result; }getDefaultSize返回的大小就是measureSpec中的specSize. layout的作用是ViewGroup用来确定子元素的位置,当ViewGroup的位置被确定后,它在onLayout中会遍历所有的子元素并调用其layout方法,在layout方法中onLayout方法又会被调用。onLayout方法则会确定所有子元素的位置。
draw的作用是将View绘制到屏幕上面,绘制过程遵循如下几步:
1.绘制背景background.draw(canvas)
2.绘制自己onDraw
3.绘制children(dispatchDraw)
4.绘制装饰(onDrawScrollBars)
新闻热点
疑难解答