1. View繪制流程
performMeasure、performLayout、performDraw
1>:performMeasure:測(cè)量xml中所有控件的寬高
對(duì)于view:它的寬高由自己和父布局決定,比如:
如果父布局是 wrap_content,就算子布局是 match_parent,測(cè)量模式也是 AT_MOST;
如果父布局是 match_parent,子布局是 match_parent,測(cè)量模式 EXACTLY;
對(duì)于ViewGroup:先測(cè)量每個(gè)子view寬高,然后根據(jù)子view寬高計(jì)算自己寬高;
2>:performLayout:擺放子布局,for循環(huán)擺放所有子view,調(diào)用 view.layout;
view.layout__view.onLayout,這個(gè)方法什么都沒做,然后看 ViewGroup的 onLayout,比如LinearLayout的onLayout,for循環(huán)遍歷所有子view,調(diào)用child.layout,代碼中調(diào)用 setText、setImageView等都是重新擺放布局:
對(duì)于LinearLayout垂直方向,有3個(gè)TextView:所有子view高度top疊加;
對(duì)于LinearLayout水平方向,有3個(gè)TextView:所有子view寬度left疊加;

3>:performDraw:繪制自己和子view
對(duì)于View:繪制文字drawText,繪制ImageView調(diào)用 drawBitmap;
對(duì)于ViewGroup:首先調(diào)用 view.draw,它有3個(gè)方法:
drawBackground:畫背景;
onDraw:畫自己,ViewGroup默認(rèn)不會(huì)調(diào)用 onDraw;
dispatchDraw:畫子view,for循環(huán)不斷調(diào)用子view的 draw;
