View繪制過程就好比你向銀行貸款,
在執行onMeasure的時候,好比銀行告訴你大概貸款額度有多少?你根據自己的需求,進行各方面的計算,計算出一個自己大概需要的金額,然后告訴詢問需要多少貸款。貸款額度好比顯示空間大小。
實際代碼執行過程是這樣
onMeasure(int widthMeasureSpec, int heightMeasureSpec),其中widthMeasureSpec和heightMeasureSpec是銀行告訴的大致額度。然后內部計算完成后,通過setMeasuredDimension(width, height)將實際需要的大小返回給父view。
即onMeasure用來確定確定view顯示的大小(通過調用子view的measure,來確定子view的大小)
在執行onLayout的時候,好比銀行收到你的貸款請求后,根據自身儲備的情況及你的資質情況,批發了貸款的額度及領取的時間。領取的時間好比顯示的起始位置,額度好比是顯示空間的大小。
實際代碼執行過程是這樣的
onLayout(boolean changed, int left, int top, int right, int bottom)-確定view在父類中的顯示位置,通過對子view的位置計算,通過調用子view的layout將在父類中的位置設置給子view。
在執行dispatchDraw的時候,好比你去銀行真正獲取貸款,拿到你需要的錢了,簽署各類合同和手續,完成你的貸款過程。
在dispatchDraw的過程是在指定的空間內繪制你需要繪制的內容,可以通過drawChild實現內部子view的繪制。
原文轉自:http://blog.sina.com.cn/s/blog_74bd788f0101axnc.html