這三者的順序就相當於蓋房子
1)先測量地基,有多大的尺寸可以讓我來操作(measure)
2)再來佈局設計,根據測量後的尺寸來設計出符合自己審美的佈局(layout)
3)繪製,開始真正的裝修了(draw)
Measure
主要是調用measure()方法,主要有兩個參數widthMeasureSpec, heightMeasureSpec
MeasureSpec就是測量規格,共32位,分爲高2位和低30位,高2位就是測量模式,低30位就是測量的尺寸大小
「通俗來講:按照什麼方法來測量類,前面說着測量規則,後面記錄好測量的尺寸」
測量規則有三種:
UNSPECIFIED :不對View進行任何限制,要多大給多大,一般用於系統內部
EXACTLY:對應LayoutParams中的match_parent和具體數值這兩種模式。檢測到View所需要的精確大小,這時候View的最終大小就是SpecSize所指定的值,
測量的步驟:先遍歷測量子View,根據子View的測量值定義自己的寬高信息
Layout
先實現自身的onLayout方法,再一層層的子View.layout方法
[通俗來講:先把自身的大框架風格設計出來,再各個房間的細節設計]
Draw
繪製步驟:
1)繪製背景background.draw(canvas) [刷牆]
2)繪製自己(onDraw)[貼磚,吊頂]
3)繪製Children(dispatchDraw) [各個房間的風格繪製]
4)繪製裝飾(onDrawScrollBars)[放點壁畫之類的]