android View繪製流程

2021-08-20 00:08:11 字數 1231 閱讀 5387

android的view的繪製流程大概就如同我們作畫一樣,分為以下幾步:

1. 測量出每個view的大小。

2.根據上一步測量得到的大小,確定view繪製的座標位置。

3.有了具體的位置及view大小,開始繪製view。

我們的activity在建立的時候就會對應的建立乙個window,用於展示我們需要展示的view,可能android為了統一介面風格吧,在activity建立的時候就給安排好了主要的三個部分,statusbar,actionbar, content,其中actionbar和content都是decorview的子view。

而所有的view的展示都依賴於在activity建立時建立的phonewindow,而view新增到phonewindow的過程又依賴於viewrootimpl,viewrootimpl通過呼叫performtranversals方法,將view新增到window上。

在performtranversal方法中會依次呼叫mview的measure,layout,draw方法,這三個方法也就完成了我們上面提到的那三點。

measue方法,用於測量view的大小,這裡view的大小是通過父view的mode及size結合子view layoutparam來確定的,首先會通過迭代的方式,計算得到子view的具體大小,然後再依次向上得到每個父view的大小(對於初始設定了大小的view,並不由其子view決定其大小),最終算出每個view的大小。measue方法是final型別的,子view不可以重寫該方法,但是在measure中會呼叫onmeasure方法,可以重寫該方法,來做不同的測量方式,對於我們所熟知的linearlayout,framelayout及relativelayout他們都進行了不同的重寫,來實現他們的布局特徵。

layout方法主要根據在第一步中測量得到的view矩陣,確定每個view所處的座標位置,在這裡view可以重寫onlayout方法,不使用之前的測量,固定寫死的去布局自己的view,不過意義不大,一般會使用系統預設的。這裡同上面一樣,對於viewgroup會迭代的呼叫其子view的layout方法完成布局。

draw在知道了view的座標及大小後,這一步就是呼叫view的draw方法繪製view及其內容和背景。這裡同上面一樣,view的繪製也是通過迭代的方式,迴圈的呼叫子view的draw方法,將所有非gone的view繪製下來,在繪製的地方有個小細節,view一旦繪製完成後,進行重繪的時候,會判斷需要繪製的部分有沒有變化,如果沒有變化就不再重繪。這一點算是對繪製過程的優化,避免在某個子view更新的時候,重繪整個螢幕。

android view繪製過程

簡單描述可以解釋為 計算大小 measure 布局座標計算 layout 繪製到螢幕 draw 下面看看每一步的動作到底是什麼,第一步 當activity啟動的時候,觸發初始化view過程的是由window物件的decorview呼叫view 具體怎樣從xml中讀取是用layoutinflater....

Android View 如何繪製

上文說道了android如何測量,但是乙個漂亮的控制項我只知道您長到哪兒,這當然不行。只需要簡單重寫ondraw方法,並在canvas 畫布 物件上呼叫那根五顏六色的畫筆就能夠畫出這控制項 的外表。那麼view又是如何進行繪製了?要了解view如何繪製,就需要了解canvas 畫布 是什麼?pain...

Android View 如何繪製

上文說道了android如何測量,但是乙個漂亮的控制項我只知道您長到哪兒,這當然不行。只需要簡單重寫ondraw方法,並在canvas 畫布 物件上呼叫那根五顏六色的畫筆就能夠畫出這控制項 的外表。那麼view又是如何進行繪製了?要了解view如何繪製,就需要了解canvas 畫布 是什麼?pain...