主要是记录与尽量简短的描述这些方法是对视图的作用是什么。
ondraw方法
/**
* 画布
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画笔
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(10);
canvas.drawRoundRect(0,0,1000,1000,500,500,paint);
}
主要是用于绘制界面时调用的方法,也就是先设置出画笔属性,用画笔paint在canvas画布上画出所设计的图形。
onMeasure
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(100,100);
}
该方法,主要用于绘制视图的宽高,源码中,按照不同的模式,视图会选择不同的宽高去展示。
onLayout
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
Log.e("onlayout","onlayout");
}
viewGroup会遍历所有子元素并调用 其layout方法,layout方法来确定子元素的位置。
该方法在每次绘制视图布局得时候被调用,也在子视图绘制布局得时候被调用。当需要自定义view视图得时候,主要是在此三个方法中去重写。
这三个方法的顺序是onMesure -> onLayout -> onDraw
可以理解为:先测宽高,再定制布局,在绘制内容。