資料鏈接:
1.GcsSloop的自定義系列
一九府、坐標系
1.移動設備坐標系
2.View的坐標系
注意:View的坐標系統(tǒng)是相對于父控件而言的.
// 獲取子View左上角距父View頂部的距離
getTop();
// 獲取子View左上角距父View左側(cè)的距離
getLeft();
// 獲取子View右下角距父View頂部的距離
getBottom();
// 獲取子View右下角距父View左側(cè)的距離
getRight();
3.MotionEvent中 get 和 getRaw 的區(qū)別
// 觸摸點相對于其所在組件坐標系的坐標
event.getX();
event.getY();
// 觸摸點相對于屏幕默認坐標系的坐標
event.getRawX();
event.getRawY();
二覆致、角度與弧度
1.角度與弧度的定義
名稱 | 定義 |
---|---|
角度 | 兩條射線從圓心向圓周射出,形成一個夾角和夾角正對的一段弧儡羔。當這段弧長正好等于圓周長的360分之一時宣羊,兩條射線的夾角的大小為1度. |
弧度 | 兩條射線從圓心向圓周射出笔链,形成一個夾角和夾角正對的一段弧。當這段弧長正好等于圓的半徑時鉴扫,兩條射線的夾角大小為1弧度. |
2.角度和弧度的換算關(guān)系
圓一周對應的角度為360度(角度),對應的弧度為2π弧度炕婶。
rad 是弧度, deg 是角度
3.屏幕坐標系角度增大
在默認的屏幕坐標系中角度增大方向為順時針柠掂。
三依沮、顏色
1.簡介
1.1.安卓支持的顏色
顏色模式 | 備注 |
---|---|
ARGB8888 | 四通道高精度(32位) |
ARGB4444 | 四通道低精度(16位) |
RGB565 | 屏幕默認模式(16位) |
Alpha8 | 僅有透明通道(8位) |
注意:我們常用的是ARGB8888和ARGB4444,而在所有的安卓設備屏幕上默認的模式都是RGB565危喉。
1.2.顏色定義
ARGB8888為例
類型 | 解釋 | 0(0x00) | 255(0xff)
----|------
A(Alpha) | 透明度 | 透明 | 不透明
R(Red) | 紅色 | 無色 | 紅色
G(Green) | 綠色 | 無色 | 綠色
B(Blue) | 藍色 | 無色 | 藍色
其中 A R G B 的取值范圍均為0255(即16進制的0x000xff)
A 從0x00到0xff表示從透明到不透明。
RGB 從0x00到0xff表示顏色從淺到深辜限。
2.顏色的創(chuàng)建與使用
2.1.java中定義
// 灰色
int color = Color.GRAY;
// 半透明紅色
int color = Color.argb(127, 255, 0, 0);
// 帶有透明度的紅色
int color = 0xaaff0000;
2.2.在xml文件中定義顏色
.../res/values/color.xml 中定義
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#ff0000</color>
<color name="green">#00ff00</color>
</resources>
定義顏色以‘#’開頭,后面跟十六進制的值氧急,有如下幾種定義方式:
// 低精度 - 不帶透明通道紅色
#f00
// 低精度 - 帶透明通道紅色
#af00
// 高精度 - 不帶透明通道紅色
#ff0000
// 高精度 - 帶透明通道紅色
#aaff0000
2.3.java中引用xml中定義的顏色
int color = getResources().getColor(R.color.mycolor);
2.4.在xml文件(layout或style)中引用或者創(chuàng)建顏色
<!--在style文件中引用-->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/red</item>
</style>
// 引用在/res/values/color.xml 中定義的顏色
android:background="@color/red"
// 創(chuàng)建并使用顏色
android:background="#ff0000"
3.顏色混合模式(Alpha通道相關(guān))
默認情況下毫深,當一個顏色繪制到Canvas上時的混合模式是這樣計算的:
(RGB通道) 最終顏色 = 繪制的顏色 + (1 - 繪制顏色的透明度) × Canvas上的原有顏色吩坝。
其他混合模式:用Paint.setXfermode费什,指定不同的PorterDuff.Mode
PorterDuff 模式的混合計算公式:
D:原本在Canvas上的內(nèi)容dst
S:繪制輸入的內(nèi)容src
a:alpha通道
c:RGB各個通道
混合模式 | 計算公式 |
---|---|
ADD | Saturate(S + D) |
CLEAR | [0, 0] |
DARKEN | [Sa + Da - SaDa, Sc(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)] |
DST | [Da, Dc] |
DST_ATOP | [Sa, Sa * Dc + Sc * (1 - Da)] |
DST_IN | [Sa * Da, Sa * Dc] |
DST_OUT | [Da * (1 - Sa), Dc * (1 - Sa)] |
DST_OVER | [Sa + (1 - Sa)Da, Rc = Dc + (1 - Da)Sc] |
LIGHTEN | [Sa + Da - SaDa, Sc(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)] |
MULTIPLY | [Sa * Da, Sc * Dc] |
SCREEN | [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] |
SRC | [Sa, Sc] |
SRC_ATOP | [Da, Sc * Da + (1 - Sa) * Dc] |
SRC_IN | [Sa * Da, Sc * Da] |
SRC_OUT | [Sa * (1 - Da), Sc * (1 - Da)] |
SRC_OVER | [Sa + (1 - Sa)Da, Rc = Sc + (1 - Sa)Dc] |
XOR | [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc] |
示例:
src:輸入的圖
dst:原Canvas上的內(nèi)容
2017/5/16 9:58:19