自定義View繪製流程(面試專用) 阿新 • • 發佈:2018-12-17 (自己整理的比較亂,但這麼說沒問題的!) 自定義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 畫筆物件 進行的繪製。