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,
评论区