1. View分類
類別 | 解釋 | 特點(diǎn) |
---|---|---|
單一視圖 | 即一個(gè)View,如 TextView | 不包含子View |
視圖組 | 即多個(gè)View組成的ViewGroup包晰,如 LinearLayout | 包含子View |
即視圖View分為兩類: View尝艘、ViewGroup
2. View類簡(jiǎn)介
- View 類是Android中各種組件的基類演侯,如View是ViewGroup的基類
- View的構(gòu)造方法 共有4個(gè),具體如下 (自定義View必須重寫至少一個(gè)構(gòu)造方法)
public class CustomView extends View {
//如果 View 是在 Java 代碼里 new 出來的背亥,則調(diào)用第一個(gè)構(gòu)造函數(shù)
public CustomView(Context context) {
super(context);
}
//如果 View 是在 .xml 里聲明的秒际,則調(diào)用第二個(gè)構(gòu)造函數(shù)
//自定義屬性是從 AttributeSet 參數(shù)傳進(jìn)來的
public CustomView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
//不會(huì)自動(dòng)調(diào)用
//一般是在第二個(gè)構(gòu)造函數(shù)里主動(dòng)調(diào)用的
//如 View 有 style 屬性時(shí)
public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//API 21 之后才使用
//不會(huì)自動(dòng)調(diào)用
//一般是在第二個(gè)構(gòu)造函數(shù)里主動(dòng)調(diào)用的
//如 View 有 style 屬性時(shí)
public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
}
3. View視圖結(jié)構(gòu)
對(duì)于多 View 的視圖悬赏,即視圖組,結(jié)構(gòu)是樹形結(jié)構(gòu):最頂層是 ViewGroup娄徊,ViewGroup下可能有多個(gè)ViewGroup或View闽颇。
View視圖結(jié)構(gòu).png
請(qǐng)記住:無論是 measure 過程寄锐、layout 過程 還是 draw 過程兵多,永遠(yuǎn)都是從 View 樹的根節(jié)點(diǎn)開始測(cè)量或計(jì)算(即從樹的頂端開始),一層一層橄仆,一個(gè)分支一個(gè)分支的進(jìn)行剩膘。最終計(jì)算整個(gè)View樹中各個(gè)View,最終確定整個(gè)View樹的相關(guān)屬性盆顾。
4. Android坐標(biāo)系
-
區(qū)別于一般的數(shù)學(xué)坐標(biāo)系
坐標(biāo)系.png
-
Android實(shí)際屏幕上的默認(rèn)坐標(biāo)系如下:( 假設(shè)深色部分為手機(jī)屏幕)
Android坐標(biāo)系.png
5. View位置描述及獲取
- View 的坐標(biāo)系統(tǒng)是相對(duì)于父控件而言的怠褐。
getLeft(); //獲取子 View 左上角距父 View 左側(cè)的距離
getTop(); //獲取子 View 左上角距父 View 頂部的距離
getRight(); //獲取子 View 右下角距父 View 左側(cè)的距離
getBottom(); //獲取子 View 右下角距父 View 頂部的距離
Android位置描述.png
- 通過 MotionEvent 對(duì)象我們得到點(diǎn)擊事件發(fā)送的 x 和 y 坐標(biāo)
event.getX();
event.getY(); //返回的是相對(duì)于當(dāng)前 View 的坐標(biāo).
event.getRawX();
event.getRawY(); //返回的是相對(duì)于手機(jī)屏幕的坐標(biāo).
MotionEvent坐標(biāo)描述.png
7. Android的角度 (angle) 與弧度 (radian)
- 自定義View實(shí)際是將一些簡(jiǎn)單的東西通過數(shù)學(xué)計(jì)算組合到一起形成的效果。
- 這其中可能會(huì)涉及到 畫布的相關(guān)操作(旋轉(zhuǎn)),以及一些正選函數(shù)的計(jì)算等椎扬,這里面就涉及到角度與弧度的相關(guān)知識(shí)
- 數(shù)學(xué)公式: 假設(shè) rad 是弧度惫搏, deg 是角度
同樣的
8. Android的顏色
詳情請(qǐng)查看 http://www.gcssloop.com/customview/Color