View从创建到显示到屏幕需要经历几个过程:
measure -> layout -> draw
measure过程:计算view所占屏幕大小
layout过程:设置view在屏幕的位置
draw过程:绘制view
继承自view的控件的draw过程
draw方法是由viewRoot对象的performTraversale()方法调用的
draw方法中做了一下几个事:
1.绘制view的背景
2.为绘制渐变做准备
3.回调onDraw()方法
4.调用dispatchDraw()方法
5.绘制渐变框
与draw有关的几个方法:
invalidate()方法
请求重新绘制view树,但是只绘制需要绘制的部分
requestLayout()方法
请求布局,调用此方法会导致调用measure过程和layout过程,但是不会调用draw过程
requestFocus()
请求调用view树的draw过程
View的绘制过程回调方法调用次数:
onMeasure -> onLayout -> onMeasure -> onLayout -> onDraw -> 显示屏幕
onMeasure和onLayout会被调用两次