流程图
整个流程的核心部分就是这样,理清了就不是很难,一张图足以说明全部问题
核心代码说明
对于没有耐心看完全部,或者只关心其中一两点的,可以只看文字部分
- ViewRootImpl,它是一个连接ContentView和WindowManager的角色,控件绘制的任务,最先就是从它开始下发的
- performMeasure,ViewRootImpl开始全局测量工作
- performLayout,ViewRootImpl开始全局布局工作
- performDraw,ViewRootImpl开始全局绘制工作
- ViewGroup,容器类的View,可以容纳其它的View
- measure,测量自身大小,不负责具体测量工作,只判断是否需要重新测量,是否需要使用缓存
- onMeasure,测量自身大小,负责实际的测量工作,需要重新测量时,measure调用onMeasure来完成测量
- measureChildren,测量所有子控件的尺寸,只有确定了子控件的尺寸,才能确定自己的尺寸
- setMeasuredDimension,确定自己测量后的尺寸
- layout,确定自己的布局位置
- onLayout,确定所有子控件的布局位置
- draw,绘制自身,只绘制背景、边框等非内容部分
- onDraw,被draw调用来负责核心内容部分的绘制
- dispatchDraw,分发绘制事件给子控件,只负责子控件绘制前的判断工作
- drawChild,需要绘制子控件时,dispatchDraw调用此方法来绘制子控件