View可以看成一个树形结构,父控件是父节点,子控件是子节点。View的绘制过程就是遍历这棵树。
View的绘制有三步:
以上的步骤必须按照顺序来。(顺便说一下,以上三个步骤发生在View的构造方法之后。)
measure是绘制视图的第一步,因为只有知道的View的大小(Width和Height)才能绘图。
我们在编写layout的xml文件的时候,会遇到layout_width和layout_height两个属性,对于这两个属性我们有三个选择:fill_parent、wrap_content和具体值,measure就是用来处理fill_parent、wrap_content两个属性的,在绘图的时候,要知道具体的值,所以要计算fill_parent、wrap_content的具体值。
下面是几个重要的函数和参数:
前两个方法是View类里面的方法,后三个方法是ViewGroup类里面的方法。
先来看看measure的源码:
setMeasuredDimension源码如下:
以上施加的限制只是父视图“希望”子视图的大小按MeasureSpec中描述的那样,但是子视图的具体大小取决于多方面的。