1. view的绘制流程从ViewRoot的performTraversals方法开始,经过measure、layout、draw三个过程后讲一个view绘制出来。 measure:用来测量view的宽高 layout:用来确定在父容器中的位置 draw:负责将view绘制在屏幕上 2. performTraversals方法会依次调用performMeasure、performLayout、performDraw三个方法。在这三个方法中分别完成顶级view的measure、layout和draw流程。已performMeasure为例,其中会调用measure方法,在measure方法中又调用onMeasure方法,onMeasure方法则会对所有的子view进行measure,这样就完成依次measure过程。接着子元素会重复父容器的measure过程,如此反复完成整个view树的遍历。同理另两个方法传递流程与此类似。 image.png 3. Measure过程完成后可以通过getMeasureWidth和getMeasureHeight方法获得View的测量宽高。测量宽高几乎所有情况下与实际宽高相等,除特殊情况除外,如需要反复测量下 4. Layout过程决定view四个顶点的坐标和实际宽高,可以通过getLeft、getRight、getTop、getBottom分别获取顶点坐标,getWith和getHeight方法获得最终宽高。 image.png 5. Draw过程决定view的显示,只有draw方法完成以后view内容才能在屏幕上显示