面試View繪制流程

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疊加;

圖片.png

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;

圖片.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容