1.draw过程
就是将view绘制到屏幕上
- view的draw
public void draw(Canvas canvas) {
final int privateFlags = mPrivateFlags;
mPrivateFlags = (privateFlags & ~PFLAG_DIRTY_MASK) | PFLAG_DRAWN;
/*
* Draw traversal performs several drawing steps which must be executed
* in the appropriate order:
*
* 1. Draw the background
* 2. If necessary, save the canvas' layers to prepare for fading
* 3. Draw view's content
* 4. Draw children
* 5. If necessary, draw the fading edges and restore layers
* 6. Draw decorations (scrollbars for instance)
*/
....
}
- 1绘制背景drawBackground(canvas);
- 3绘制自己onDraw(canvas);
- 4绘制子元素dispatchDraw(canvas);
- 6绘制前景装饰onDrawForeground(canvas);
- 7绘制焦点高亮drawDefaultFocusHighlight(canvas);
2.ViewGroup的draw
- viewGroup有drawChild方法,内部调用draw
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
return child.draw(canvas, this, drawingTime);
}
- child.draw(3个参数)会调用view.draw(Canvas), 流程回到了view的draw