https://www.jianshu.com/writer#/notebooks/14045782/notes/14163616 这篇文章 描述了window的添加过程,这篇继续描述UI的绘制流程
ViewRootImpl 的performTraversals()方法中,分别调用了performMessure,performLayout,performDraw 三个方法,对应我们自定义UI时的最重要的三个方法,onMeassure(), onLayout(),onDraw() 三个方法,开启了DecorView的绘制流程。
-
performMeasure
在performMeasure方法中,可以看到,调用了mView.measure方法,这个mView就是decorView,将款和高的MeasureSpec信息传入。
先说一下MeasureSpec的作用,在Measure流程中,系统将View的LayoutParams根据父容器所施加的规则转换成对应的MeasureSpec,通过MeasureSpec来进行统一的测量。
在measure方法中,又调用了onMeasure方法,进入了View的onMeasure方法中。进入了测量
2.performLayout
performLayout 方法中,调用了host.layout方法, host的赋值是mView,和performMeasure一样,这个View是decorView,将decorView摆放到屏幕中。
在host.layout方法中,又调用了onLayout方法,将整个Layout的过程交给了onLayout。
3.performDraw
performDraw调用了draw方法法。
draw方法中又调用了 mAttachInfo.mTreeObserver.dispatchOnDraw();
dispatchOnDraw方法又调用了onDraw()进行了绘制。
注意:在自定义viewGroup的时候,如果想拿到margin,要先复写了generateLayoutParams方法。