View的绘制,测量,布局

view 的draw()

画了个白板,内部会调用ondraw()

自定义view 有特殊图形请重写绘制请重写 ondraw()

view 的measure

测量出自己有多大,内部会调用onmearsure()

自定义view 自己控制大小请重写onmeasure,把大小存入setMeasuredDimension()

或者直接super.onmeasure()

在做自定义view通常需要重写因为

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}
<p>public static int getDefaultSize(int size, int measureSpec) {
int result = size;
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);</p>
<pre><code>    switch (specMode) {
    case MeasureSpec.UNSPECIFIED:
        result = size;
        break;
    case MeasureSpec.AT_MOST:
    case MeasureSpec.EXACTLY:
        result = specSize;
        break;
    }
    return result;
}

不重写绘制的大小是父view的大小

view的layout

分配大小和位置,内部会调用onlayout()

一般不需要重写,让viewgruop 来定夺自己应该在那

viewgruop 的 draw 与view类似

一般需要自己重写ondraw,分别调用自己子类的draw

viewgruop的 measure

一般需要自己重写measure,分别调用自己子类的measure,在计算自己大小

viewgruop的 onlayout

一般需要自己重写onlayout,分别调用自己子类的onlayout,