View 绘制原理
2017-07-18 21:09:26 12 举报
View绘制原理流程图,从源码的角度画的
作者其他创作
大纲/内容
onDraw() 方法是绘制当前View 的内容
判断是否需要定位
no
performTraversals()
yes
dispatchDraw()方法是在 ViewGroup中实现的;dispatchDraw() 方法是绘制当前View 的子View,最终还是调用了子View的onDraw()方法来绘制子View的内容
performLayout()
mView是PhoneWindow.DecorView
到此,draw也就结束了!!!
onDrawForeground()
mView.draw(canvas)
draw(boolean fullRedrawNeeded)
drawBackground()
调用
measure()方法是一个final类的
performDraw()
判断view的位置是否发生变化,是否需要重新layout
performMeasure()
onDrawScrollBars()
onDraw()
此方法将得到的view真实宽高赋值给mMeasuredWidth、mMeasuredHeight;measure 到此结束!!!
onMeasure()方法是可以重写的,具体要看对应的View是怎么写的
此方法在View中是空的,具体实现要看View的子View
判断是否需要测量
drawSoftware()
onMeasure()
得到此view的真正宽高
View
onLayout()
setMeasuredDimension()
此方法是计算此view的正真宽高
measure()
ViewRootImpl
dispatchDraw()
draw(canvas)
到此layout就结束了!!!
我们一般都是重写onDraw() 方法来绘制我们的View
判断是否需要draw
mView.measure()
到此,View 的绘制就结束了!!!
layout()
setMeasuredDimensionRaw()
host.layout()host就是mView
1、getSuggestedMinimumWidth()、getSuggestedMinimumHeight()这两个方法是得到view的最小宽高;2、getDefaultSize()得到的是view的真实宽高;
0 条评论
下一页