天天看點

View的draw機制

View:

1、draw

//繪制一個View以及他的子View。最好不要覆寫該方法,應該覆寫onDraw方法來繪制自己。

public void draw(Canvas canvas);

public void draw(Canvas canvas) {  
    1、繪制 backgroud(drawBackground)  ;  
    2、如果需要的話,儲存canvas的layer,來準備fading ;  
    3、繪制view的content(onDraw方法);  
    4、繪制children(dispatchDraw方法);  
    5、如果需要的話,繪制fading edges,然後還原layer ;  
    6、繪制裝飾器、比如scrollBar(onDrawForeground);  
}  
      

2、onDraw

//繪制一個View的外觀。View的預設實作是空實作,是以這裡沒有源碼給出。

protected void dispatchDraw(Canvas canvas) {  
    if (需要繪制布局動畫) {  
    for (周遊子View) {  
        綁定布局動畫;  
    }  
    啟動動畫控制,通知動畫開始;  
    }  
  
    for (周遊子View) {  
    child.draw();  
    }  
}