第136篇View 绘制流程:measure、layout、draw 三部曲 先把结论放在前面:一次 View 的完整绘制要过三关——measure(定大小)、layout(定位置)、draw(画像素),由ViewRootImpl驱动,Choreographer决定时机。三个必须张口就来的判定:requestLayout走三关全流程、invalidate只走 draw 一关、postInvalidate支持子线程。这三句话答完,后面所有细节都是挂在这条主线上的。View 绘制流程看起来简单,追问起来全是细节。这篇把它掰开揉碎,从概念到坑点过一遍。一次帧的完整时间线从手指抬起(或动画推进)到像素上屏,顺序是这样的:Choreographer.doFrame() ├─ performTraversals() // ViewRootImpl 内部 │ ├─ requestLayout() 被标记?→ 走 measure + layout │ ├─ 计算下一帧目标时间(vsync 对齐) │ └─ scheduleTraversals() → 下一帧执行 │ ├─ performMeasure() // 三关之一:定大小 ├─ performLayout() // 三关之二:定位置 └─ performDraw()