三、View 繪製流程 —— 基礎(1)
1. View分類
類別 | 解釋 | 特點 |
---|---|---|
單一檢視 | 即一個View,如 TextView | 不包含子View |
檢視組 | 即多個View組成的ViewGroup,如 LinearLayout | 包含子View |
即檢視View分為兩類: View 、 ViewGroup
2. View類簡介
- View 類是Android中各種元件的基類,如View是ViewGroup的基類
- View的構造方法 共有4個,具體如下 (自定義View必須重寫至少一個構造方法)
public class CustomView extends View { //如果 View 是在 Java 程式碼裡 new 出來的,則呼叫第一個建構函式 public CustomView(Context context) { super(context); } //如果 View 是在 .xml 裡宣告的,則呼叫第二個建構函式 //自定義屬性是從 AttributeSet 引數傳進來的 public CustomView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } //不會自動呼叫 //一般是在第二個建構函式裡主動呼叫的 //如 View 有 style 屬性時 public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } //API 21 之後才使用 //不會自動呼叫 //一般是在第二個建構函式裡主動呼叫的 //如 View 有 style 屬性時 public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } }
3. View檢視結構
對於多 View 的檢視,即檢視組,結構是 樹形結構 :最頂層是 ViewGroup,ViewGroup下可能有多個ViewGroup或View。

View檢視結構.png
請記住:無論是 measure 過程、layout 過程 還是 draw 過程,永遠都是從 View 樹的根節點開始測量或計算(即從樹的頂端開始),一層一層,一個分支一個分支的進行。最終計算整個View樹中各個View,最終確定整個View樹的相關屬性。
4. Android座標系
-
區別於一般的數學座標系
座標系.png
-
Android實際螢幕上的預設座標系如下:( 假設深色部分為手機螢幕)
Android座標系.png
5. View位置描述及獲取
- View 的座標系統是相對於父控制元件而言的。
getLeft();//獲取子 View 左上角距父 View 左側的距離 getTop();//獲取子 View 左上角距父 View 頂部的距離 getRight();//獲取子 View 右下角距父 View 左側的距離 getBottom();//獲取子 View 右下角距父 View 頂部的距離

Android位置描述.png
- 通過 MotionEvent 物件我們得到點選事件傳送的 x 和 y 座標
event.getX(); event.getY();//返回的是相對於當前 View 的座標. event.getRawX(); event.getRawY();//返回的是相對於手機螢幕的座標.

MotionEvent座標描述.png
7. Android的角度 (angle) 與弧度 (radian)
- 自定義View實際是將一些簡單的東西通過數學計算組合到一起形成的效果。
- 這其中可能會涉及到 畫布的相關操作(旋轉),以及一些正選函式的計算等,這裡面就涉及到角度與弧度的相關知識
- 數學公式: 假設 rad 是弧度, deg 是角度
同樣的
8. Android的顏色
詳情請檢視 ofollow,noindex">http://www.gcssloop.com/customview/Color