從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來佈局。