高级UI------(一)UI的绘制流程
2019-08-23 本文已影响0人
一只胖胖胖胖猿
View是如何被添加到屏幕窗口的
- 创建顶层布局容器DecorView
- 在顶层布局容器中加载基础布局ViewGroup
- 将ContentView添加到基础布局中的FrameLayout中
View的绘制流程
- 绘制入口
ActivityThread.handleResumeActivity
-->WindowManagerImpl.addView(dercorView,layoutParams)
-->WindowManagerGlobal.addView()
- 绘制的类及方法
ViewRootImpl.-->setView(decorView,layoutParams,parentView)
-->ViewRootImpl.requestLayout()-->scheduleTraversals()-->doTraversal()
-->performTraversals()
- 绘制三大步骤
测量:ViewRootImpl.performMeasure
布局:ViewRootImpl.performLayout
绘制:ViewRootImpl.performDraw
UI绘制详细步骤
- 测量performMeasure
view.measure-->view.onMeause-->view.setMeasuredDimension
-->setMeasuredDimensionRaw
- 布局performLayout
view.layout-->view.onLayout
- 绘制performDraw
ViewRootImpl.draw(fullRedrawNeeded)
-->ViewRootImpl.drawSoftware-->view.draw(Canvas)
View的测量- 确定DecorView的MeasureSpec
1、DecorView的MeasureSpec由窗口大小和自身LayoutParams决定,遵守如下规则:
- LayoutParams.MATCH_PARENT:精确模式,窗口大小
- LayoutParams.WRAP_CONTENT:最大模式,最大为窗口大小
-固定大小:精确模式,大小为LayoutParams的大小