View的Draw方法流程

最近学习了View的Draw方法,这里做个总结。Draw方法分6步完成View的绘制。

1、绘制背景background

2、如果有颜色变淡,那么锁定原来的画布canvas,canvas.save

3、绘制View自身的内容

4、绘制子View

5、如果2步有颜色变淡操作,恢复原来锁定的画布canvas,canvas.restore

6、绘制滚动条等装饰


View的绘制流程:onMeasure,onLayout,onDraw。

onMeasure:测量视图大小。从顶层父View到子View递归调用measure,measure中调用onMeasure

onLayout:确定View位置。也是递归

onDraw:绘制视图,1、绘制背景,2、保存画布,3、绘制内容,4、绘制子View,5、恢复画布,6、绘制滚动条


onMeasure中返回的值通过MeasureSpec.makeMeasureSpec对mode和size进行组合。

mode有三种EXACTLY可指定大小也可实际大小,AT_MOST最大的空间,UNSPECIFIED设置任意大小,没有限制。


具体应用是1、GridView和ListView外面嵌套ScrollView的时候,滑动冲突;2、设置为wrap_content的时候高度问题被截断



你可能感兴趣的:(View的Draw方法流程)