View繪制的三大流程,指的是measure(測量)、layout(布局)、draw(繪制)
創新互聯長期為超過千家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為費縣企業提供專業的網站制作、網站設計,費縣網站改版等技術服務。擁有10余年豐富建站經驗和眾多成功案例,為您定制開發。measure負責確定View的測量寬/高,也就是該View需要占用屏幕的大小,確定完View需要占用的屏幕大小后,就會通過layout確定View的最終寬/高和四個頂點在手機界面上的位置,等通過measure和layout過程確定了View的寬高和要顯示的位置后,就會執行draw繪制View的內容到手機屏幕上。
在詳細介紹這三大流程之前,需要簡單了解一下ViewRootImpl,View繪制的三大步驟都是通過ViewRootImpl實現的,ViewRootImpl是連接WindowManager窗口管理和DecorView頂層視圖的紐帶。View的繪制流程從ViewRootImpl的performTraversals方法開始,順序執行measure、layout、draw這三個流程,最終完成對View的繪制工作,在performTraversals方法中,會調用measure、layout、draw這三個方法,這三個方法內部也會調用其對應的onMeasure、onLayout、onDraw方法,通常我們在自定義View時,也就是重寫的這三個方法來實現View的具體繪制邏輯
下面詳細了解下各個步驟經歷的主要方法(這里貼的源碼版本為API 23)
一、measure
在performTraversals方法中,第一個需要進行的就是measure過程,獲取到必要信息后,performTraversals方法中首先會調用measureHierarchy方法,接著measureHierarchy方法里再去調用performMeasure方法,在performMeasure方法中最終就會去調用View的measure方法,從而開始進行測量過程
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); } }
網頁標題:淺談AndroidView繪制三大流程探索及常見問題-創新互聯
本文URL:http://vcdvsql.cn/article0/cedjio.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、小程序開發、用戶體驗、網站設計公司、網站制作、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯