View绘制流程

View绘制流程函数调用链(简化版)

View绘制流程_第1张图片
image.png

参考: http://www.gcssloop.com/customview/CustomViewProcess

1、measure

MeasureSpec

View绘制流程_第2张图片
image.png

组成:测量规格(MeasureSpec) = 测量模式(mode) + 测量大小(size)


View绘制流程_第3张图片
image.png

其中,测量模式(Mode)的类型有3种:UNSPECIFIED、EXACTLY 和
AT_MOST。具体如下:


View绘制流程_第4张图片
image.png

子view的大小由父view的MeasureSpec值 和 子view的LayoutParams属性 共同决定


View绘制流程_第5张图片
image.png

其中的规律总结:(以子View为标准,横向观察)


View绘制流程_第6张图片
image.png

现在,分别讨论两种measure过程:
①View的measure:
View绘制流程_第7张图片
image.png

②ViewGroup的measure:

View绘制流程_第8张图片
image.png

参考: https://www.jianshu.com/p/1dab927b2f36

2、layout

流程:view依次调用layout()过程中会调用setFrame()设置view本身的四个顶点位置,接着调用onLayout来确定其坐标,该方法是控方法,因为不同的viewGroup对其子View的布局是不同的。

layout过程根据View的类型分为2种情况:

View绘制流程_第9张图片
image.png

View绘制流程_第10张图片
image.png

参考: https://www.jianshu.com/p/158736a2549d

3、draw

draw过程根据View的类型分为2种情况:


View绘制流程_第11张图片
image.png
View绘制流程_第12张图片
image.png

参考:https://www.jianshu.com/p/95afeb7c8335

你可能感兴趣的:(View绘制流程)