measure layout

從ViewRoot的實現類ViewRootImpl中執行繪製,調用performTraversals()。
在這個方法裏調用
這裏寫圖片描述
接下來分析view和viewgroup的measure的處理,measure是view的final方法不能重寫,在measure方法中調用onMeasure方法,
1.在view中的話調用onMeasure內部是這樣處理的
這裏寫圖片描述
這裏寫圖片描述
在view的實現類中onMeasure是這樣處理的
這裏寫圖片描述

2.在viewGroup中並沒有重寫onMeasure方法(因爲Viewgroup也是繼承自View,所以Viewgroup會有onMeasure方法),而是提供了measureChildren、等方法,所以繼承自viewGroup的佈局必須重寫onMeasure方法來計算內部的子view大小。
這裏寫圖片描述


接下來到layout,通過ViewRootImpl的performTraversals方法中調用host.layout方法,viewGroup中沒有layout方法,此方法是view的,viewgroup並沒有重寫,在view的layout方法中調用onLayout方法。因爲viewGroup是繼承自View的所以如果最外層是viewGroup的時候也會調用layout,然後調用onLayout方法。這樣就調用到了viewgroup的抽象onLayout方法了。

這裏寫圖片描述
1.view中的話

2.在ViewGroup中onLayout方法是抽象的,爲什麼呢因爲所有的繼承自viewgroup的類必須實現onLayout方法,因爲要給子view來佈局。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章