前言
最近做個(gè)項(xiàng)目贷帮,寫了大量的自定義 View 敢伸,突然今天就想寫一個(gè)從 0 到1 的 Android 自定義 View 的文章辛萍,為了更好的總結(jié)和理解遇骑。最后卖毁,如果對(duì)每周的名企面試題或者本系列文章興趣的可以關(guān)注公眾號(hào)“于你供讀”
目錄
一、Android 坐標(biāo)系
1落萎、Android 屏幕坐標(biāo)
數(shù)學(xué)中常見的坐標(biāo)系與 Android 系統(tǒng)上 View 的坐標(biāo)系是有點(diǎn)差別的亥啦,Android 設(shè)備中炭剪,屏幕的左上角為坐標(biāo)原點(diǎn),向右為 x 軸增大方向翔脱,向下為 y 軸增大方向奴拦。
2、View 的坐標(biāo)
View 的坐標(biāo)是相對(duì)父容器而言的
getTop(); //獲取子View左上角距父View頂部的距離
getLeft(); //獲取子View左上角距父View左側(cè)的距離
getBottom(); //獲取子View右下角距父View頂部的距離
getRight(); //獲取子View右下角距父View左側(cè)的距離
其中的源代碼:
/**
* Top position of this view relative to its parent.
* 相對(duì)應(yīng)父控件的top位置届吁,單位為像素错妖,即頭部到父控件的距離
* @return The top of this view, in pixels.
*/
@ViewDebug.CapturedViewProperty
public final int getTop() {
return mTop;
}
3、MotionEvent中 get 和 getRaw 的區(qū)別
event.getX(); //觸摸點(diǎn)相對(duì)于其所在組件坐標(biāo)系的坐標(biāo)
event.getY();
event.getRawX(); //觸摸點(diǎn)相對(duì)于屏幕默認(rèn)坐標(biāo)系的坐標(biāo)
event.getRawY();
二瓷产、Android 中的角度與弧度
Android 自定義 View 中站玄,經(jīng)常會(huì)用到一些角度弧度的計(jì)算,還有一些數(shù)學(xué)函數(shù)的應(yīng)用濒旦,因此株旷,Android 中的角度和弧度我們也需要了解。
1尔邓、角度與弧度的定義
角度:兩條射線從圓心向圓周射出晾剖,形成一個(gè)夾角和夾角正對(duì)的一段弧。當(dāng)這段弧長(zhǎng)正好等于圓周長(zhǎng)的360分之一時(shí)梯嗽,兩條射線的夾角的大小為1度.
弧度:兩條射線從圓心向圓周射出齿尽,形成一個(gè)夾角和夾角正對(duì)的一段弧。當(dāng)這段弧長(zhǎng)正好等于圓的半徑時(shí)灯节,兩條射線的夾角大小為1弧度.
2循头、角度和弧度的換算關(guān)系
圓一周對(duì)應(yīng)的角度為360度(角度),對(duì)應(yīng)的弧度為2π弧度炎疆。
故得等價(jià)關(guān)系:360(角度) = 2π(弧度) ==> 180(角度) = π(弧度)
得出公式:
一角度=π/180弧度
一弧度= 180/π角度
注意:
在常見的數(shù)學(xué)坐標(biāo)系中角度增大方向?yàn)槟鏁r(shí)針?lè)较?br> 在默認(rèn)的屏幕坐標(biāo)系中角度增大方向?yàn)轫槙r(shí)針?lè)较?/p>
三卡骂、顏色
1、Java 中定義顏色
xml 定義顏色相信剛接觸 Android 的都基本會(huì)用的形入,所以這里就介紹下 Java 中定義顏色全跨,畢竟顏色在自定義 View 中也是必不可少的。
int color = Color.BLACK; //黑色
int color = Color.argb(127, 255, 0, 0); //半透明紅色
int color = Color.parseColor("#ffffff"); //白色
2亿遂、透明度
透明度也是必不可少的浓若,透明度分為 256 階(0-255),計(jì)算機(jī)上用 16 進(jìn)制表示為(00-ff)蛇数。透明就是 0 階挪钓,不透明就是25 5階,如果 50% 明就是 127 階(256 的一半當(dāng)然是 128,但因?yàn)槭菑?0 開始苞慢,所以實(shí)際上是127 )诵原。
透明度 和 不透明度 是兩個(gè)概念, 它們加起來(lái)是 1,或者 100%
ARGB 中的透明度alpha绍赛,表示的是不透明度蔓纠。