前言
最近做個專案,寫了大量的自定義 View ,突然今天就想寫一個從 0 到1 的 Android 自定義 View 的文章,為了更好的總結和理解。最後,如果對每週的名企面試題或者本系列文章興趣的可以關注公眾號“於你供讀”
目錄
一、Android 座標系
1、Android 螢幕座標
數學中常見的座標系與 Android 系統上 View 的座標系是有點差別的,Android 裝置中,螢幕的左上角為座標原點,向右為 x 軸增大方向,向下為 y 軸增大方向。
2、View 的座標
View 的座標是相對父容器而言的
getTop(); //獲取子View左上角距父View頂部的距離
getLeft(); //獲取子View左上角距父View左側的距離
getBottom(); //獲取子View右下角距父View頂部的距離
getRight(); //獲取子View右下角距父View左側的距離複製程式碼
其中的原始碼:
/**
* Top position of this view relative to its parent.
* 相對應父控制元件的top位置,單位為畫素,即頭部到父控制元件的距離
* @return The top of this view, in pixels.
*/
@ViewDebug.CapturedViewProperty
public final int getTop() {
return mTop;
}複製程式碼
3、MotionEvent中 get 和 getRaw 的區別
event.getX(); //觸控點相對於其所在元件座標系的座標
event.getY();
event.getRawX(); //觸控點相對於螢幕預設座標系的座標
event.getRawY();複製程式碼
二、Android 中的角度與弧度
Android 自定義 View 中,經常會用到一些角度弧度的計算,還有一些數學函式的應用,因此,Android 中的角度和弧度我們也需要了解。
1、角度與弧度的定義
角度:兩條射線從圓心向圓周射出,形成一個夾角和夾角正對的一段弧。當這段弧長正好等於圓周長的360分之一時,兩條射線的夾角的大小為1度.
弧度:兩條射線從圓心向圓周射出,形成一個夾角和夾角正對的一段弧。當這段弧長正好等於圓的半徑時,兩條射線的夾角大小為1弧度.
2、角度和弧度的換算關係
圓一週對應的角度為360度(角度),對應的弧度為2π弧度。
故得等價關係:360(角度) = 2π(弧度) ==> 180(角度) = π(弧度)
得出公式:
一角度=π/180弧度
一弧度= 180/π角度
注意:
在常見的數學座標系中角度增大方向為逆時針方向
在預設的螢幕座標系中角度增大方向為順時針方向
三、顏色
1、Java 中定義顏色
xml 定義顏色相信剛接觸 Android 的都基本會用的,所以這裡就介紹下 Java 中定義顏色,畢竟顏色在自定義 View 中也是必不可少的。
int color = Color.BLACK; //黑色
int color = Color.argb(127, 255, 0, 0); //半透明紅色
int color = Color.parseColor("#ffffff"); //白色複製程式碼
2、透明度
透明度也是必不可少的,透明度分為 256 階(0-255),計算機上用 16 進製表示為(00-ff)。透明就是 0 階,不透明就是25 5階,如果 50% 明就是 127 階(256 的一半當然是 128,但因為是從 0 開始,所以實際上是127 )。
透明度 和 不透明度 是兩個概念, 它們加起來是 1,或者 100%
ARGB 中的透明度alpha,表示的是不透明度。