(二)自定義VIew理論之View工作流程

一、簡述

VIew的工作流程主要是指measure、layout、draw這三大流程,即測量、布局、繪制。measure確定View的測量寬高;layout確定View的最終寬高和四個頂點(diǎn)的位置;draw則將VIew繪制到屏幕上。

二、measure過程

1. View的measure過程

由measure()方法來完成,measure()方法是final類型的方法,因此不能被重寫。而measure方法會去調(diào)用onMeasure()方法,因此只需要看onMeasure()的實(shí)現(xiàn)即可。具體可以參看上一節(jié)相關(guān)內(nèi)容。

2. ViewGroup的measure過程

除了完成自己的measure外,遞歸地調(diào)用子元素的measure方法

3. 注意事項

View的measure過程完成以后就可以通過getMeasuredWidth/Height方法來獲取View的測量寬高。但是在某些極端情況下,系統(tǒng)可能需要多次measure過程才能最終確定View的測量寬高,因此在這種情況下獲取的View的測量寬高可能是不準(zhǔn)確的。最好在onLayout()方法中去過去View的測量寬高。

三、layout過程

ViewGroup通過layout()方法確定子元素的位置,當(dāng)位置確定以后在onLayout()方法中遍歷所有子元素的layout()方法,如此遞歸。
??layout()方法的大致流程:首先通過setFrame()方法來設(shè)置四個頂點(diǎn)的位置,即初始化mLeft、mRight、mTop、mBottom這四個值。View的四個頂點(diǎn)確定了,那么View在父容器的位置就確定了;然后調(diào)用onLayout()方法,這個方法的作用是父容器確定子元素的位置。和onMeasure()方法類似,onLayout()的具體實(shí)現(xiàn)同樣和具體的布局有關(guān),所以View和ViewGroup均沒有實(shí)現(xiàn)onLayout()方法。

四、draw過程

  1. 繪制背景background.draw(canvas)
  2. 繪制自己(onDraw)
  3. 繪制Children(dispatchDraw)
  4. 繪制裝飾(onDrawScrollBars)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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