1. 程式人生 > >自定義View繪製流程(面試專用)

自定義View繪製流程(面試專用)

(自己整理的比較亂,但這麼說沒問題的!)
自定義view是幹嘛的呢?

當我們不滿足於Android提供的原生控制元件和佈局時,就應該考慮到自定義view。

自定義View分為兩大塊。 

自定義控制元件  和  自定義容器

自定義View必須重寫兩個構造方法 

第一個是一個引數的上下文,用於在java程式碼中new物件使用 

第二個是兩個引數的一個上下文,一個AttributSet。 主要用於在xml中定義使用。

OnMesure  計算出控制元件的大小。 

onLayout   計算出控制元件的位置。 

onDraw    畫出樣式  

ViewGroup\View的繪製流程:

第一步:呼叫ViewGroup中的onMeasure方法。

           在方法中呼叫了measureChild方法,執行了所有子控制元件的onMesure方法測繪出所有的子控制元件的大小。

呼叫setMeasureDimension方法 設定測繪後的大小。

第二步:呼叫ViewGroup中的onLayout方法。

在方法呼叫getChildCount方法 獲取到子條目數量。

用for迴圈遍歷出每一個子條目的物件。 通過物件.layout方法 給子控制元件設定擺放位置。

第三步:首先呼叫ViewGroup的disPatchDraw方法繪製ViewGroup。然後呼叫View中的onDraw方 進行繪製。 

方法詳解:

 onMeasure:用於設定自定義view的大小

  setMeasuredDimension();

  方法內部需要呼叫MeasureSpec類 可以獲取到view的模式 和 大小;

MeasureSpec.getMode()獲取模式

MeasureSpec.getSize()獲取大小​       

模式:

MeasureSpec.EXACTLY 精確值模式: match_parent 或者 固定一個值(。。dp)時使用。

MeasureSpec.AT_MOST 最大值模式: warp_content 當不確定大小時使用。但是不超過父控制元件

MeasureSpec.UNSPECIFIED 不用 就不總結了。

onDraw方法:

用於繪製自定義View。

主要使用到了Canvas 畫布物件。 和Paint 畫筆物件 進行的繪製。