View繪制的三大流程,指的是measure(測(cè)量)、layout(布局)、draw(繪制)

measure負(fù)責(zé)確定View的測(cè)量寬/高,也就是該View需要占用屏幕的大小,確定完View需要占用的屏幕大小后,就會(huì)通過layout確定View的最終寬/高和四個(gè)頂點(diǎn)在手機(jī)界面上的位置,等通過measure和layout過程確定了View的寬高和要顯示的位置后,就會(huì)執(zhí)行draw繪制View的內(nèi)容到手機(jī)屏幕上。
在詳細(xì)介紹這三大流程之前,需要簡單了解一下ViewRootImpl,View繪制的三大步驟都是通過ViewRootImpl實(shí)現(xiàn)的,ViewRootImpl是連接WindowManager窗口管理和DecorView頂層視圖的紐帶。View的繪制流程從ViewRootImpl的performTraversals方法開始,順序執(zhí)行measure、layout、draw這三個(gè)流程,最終完成對(duì)View的繪制工作,在performTraversals方法中,會(huì)調(diào)用measure、layout、draw這三個(gè)方法,這三個(gè)方法內(nèi)部也會(huì)調(diào)用其對(duì)應(yīng)的onMeasure、onLayout、onDraw方法,通常我們?cè)谧远xView時(shí),也就是重寫的這三個(gè)方法來實(shí)現(xiàn)View的具體繪制邏輯
下面詳細(xì)了解下各個(gè)步驟經(jīng)歷的主要方法(這里貼的源碼版本為API 23)
一、measure
在performTraversals方法中,第一個(gè)需要進(jìn)行的就是measure過程,獲取到必要信息后,performTraversals方法中首先會(huì)調(diào)用measureHierarchy方法,接著measureHierarchy方法里再去調(diào)用performMeasure方法,在performMeasure方法中最終就會(huì)去調(diào)用View的measure方法,從而開始進(jìn)行測(cè)量過程
private void performMeasure(int childWidthMeasureSpec, int childHeightMeasureSpec) {
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "measure");
try {
mView.measure(childWidthMeasureSpec, childHeightMeasureSpec);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_VIEW);
}
}
網(wǎng)頁標(biāo)題:淺談AndroidView繪制三大流程探索及常見問題-創(chuàng)新互聯(lián)
本文URL:http://chinadenli.net/article0/cedjio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、小程序開發(fā)、用戶體驗(yàn)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容