layout主要是設置view的4個坐標
setChildFrame(left,top,right,bottom);
getMeasuredHeight() 和getWidth() 區別:
public final int getWidth(){
return mRight - mLeft;
}
public final int getHeight(){
return mBottom - mTop;
}
在View的默認實現中,View的測量寬/高和最終的寬哥是相等的,只不過測量寬高形成于View的Mearsure過程,而最終寬高是形成于View的layout過程,即兩者的賦值時機不同,測量寬高的賦值時機稍微早一些,因此,在日常開發中,我可以認為View的測量寬高跟最終寬高相同,但是也有例外,例如如下:
public void layout(int l, int t , int r , int b ){
super.layput(l,t+100,r+100,b );
}
view寬高
getSuggestedMinimumWidth 中: 如果View沒有設置北京,那么View的寬高幾位mMinWidth,即android:minWidth屬性。這個屬性不如不指定默認為0 ,如果View指定了北京,view的寬高為max(mMinWidth,mBackground.getMinimumWidth())
draw過程:
- 繪制背景background.draw(canvas)
- 繪制自己(onDraw)
- 繪制children (dispatchDraw)
- 繪制裝飾(onDrawScrollBars)
View有一個特殊的方法setWillNotDraw,
如果一個View不需要繪制任何內容,那么設置這個標記為true之后,系統會進行相應的優化。默認情況下,View沒有啟用這個優化標記位,但是ViewGroup會默認啟用這個優化標記為。這個標記為,對實際開發的意義是:當我們的自定義控件繼承于ViewGroup并且本身不具備繪制功能是,就可以開啟這個標記為,從而便于系統后續的優化。當然,明確指導一個ViewGroup 需要通過onDraw來繪制內容時,我們需要顯示的關閉WILL_NOT_DRAW這個標記位