天天看點

Android自定義View學習(1)——基礎知識介紹

原文:Android自定義View學習(1)——基礎知識介紹 - Stars-One的雜貨小窩

準備學習自定義View,介紹一下先了解了下相關的前置基礎知識,特此總結

本系列集合文章連結可通路Android自定義View學習系列教程

坐标系

螢幕坐标系

不管是Android裝置,還是PC裝置,螢幕坐标原點都是在左上角

Android自定義View學習(1)——基礎知識介紹
隻需要記住一點:螢幕的y坐标與數學中的坐标系相反的!

View的坐标

getTop();       //擷取子View左上角距父View頂部的距離
getLeft();      //擷取子View左上角距父View左側的距離
getBottom();    //擷取子View右下角距父View頂部的距離
getRight();     //擷取子View右下角距父View左側的距離
           

圖例:

Android自定義View學習(1)——基礎知識介紹

事件中的觸摸點坐标

Android自定義View中,肯定會涉及到關于事件,一般Android使用

MotionEvent

類來裝載定義的觸摸點坐标

event.getX();       //觸摸點相對于其所在元件坐标系的坐标
event.getY();

event.getRawX();    //觸摸點相對于螢幕預設坐标系的坐标
event.getRawY();
           

圖例:

Android自定義View學習(1)——基礎知識介紹

顔色

顔色常用RGB,需要透明度的則是ARGB格式

A

:從0x00到0xff表示從透明到不透明。

RGB

:從0x00到0xff表示顔色從淺到深。

當RGB全取最小值(0或0x000000)時顔色為黑色,全取最大值(255或0xffffff)時顔色為白色

透明色

關于透明色的設定,Android和前端Css有所差別 Android這邊是前兩位,而Css中是後兩位

Android設定顔色透明度,範圍大小為

00-FF

,如FF代表設定不透明度為100%

Android自定義View學習(1)——基礎知識介紹

css中,後兩位設定顔色透明度,範圍也是

00-FF

Android自定義View學習(1)——基礎知識介紹

不透度對應16進制大全(0-100)

不透明度 16進制
0% 00
1% 03
2% 05
3% 08
4% 0A
5% 0D
6% 0F
7% 12
8% 14
9% 17
10% 1A
11% 1C
12% 1F
13% 21
14% 24
15% 26
16% 29
17% 2B
18% 2E
19% 30
20% 33
21% 36
22% 38
23% 3B
24% 3D
25% 40
26% 42
27% 45
28% 47
29% 4A
30% 4D
31% 4F
32% 52
33% 54
34% 57
35% 59
36% 5C
37% 5E
38% 61
39% 63
40% 66
41% 69
42% 6B
43% 6E
44% 70
45% 73
46% 75
47% 78
48% 7A
49% 7D
50% 80
51% 82
52% 85
53% 87
54% 8A
55% 8C
56% 8F
57% 91
58% 94
59% 96
60% 99
61% 9C
62% 9E
63% A1
64% A3
65% A6
66% A8
67% AB
68% AD
69% B0
70% B3
71% B5
72% B8
73% BA
74% BD
75% BF
76% C2
77% C4
78% C7
79% C9
80% CC
81% CF
82% D1
83% D4
84% D6
85% D9
86% DB
87% DE
88% E0
89% E3
90% E6
91% E8
92% EB
93% ED
94% F0
95% F2
96% F5
97% F7
98% FA
99% FC
100% FF

顔色定義

1.通過Color類

int color = Color.GRAY;     //灰色
int color = Color.argb(127, 255, 0, 0);   //半透明紅色
           

2.直接定義16進制數值

//相當于#aaff0000
int color = 0xaaff0000;                   //帶有透明度的紅色
           

3.在xml檔案中定義顔色

這種相信各位經常用,友善管理

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#ff0000</color>
    <color name="green">#00ff00</color>
</resources>
           

補充

#

定義顔色:

#f00            //低精度 - 不帶透明通道紅色
#af00           //低精度 - 帶透明通道紅色

#ff0000         //高精度 - 不帶透明通道紅色
#aaff0000       //高精度 - 帶透明通道紅色
           

在Java中引用:

int color = getResources().getColor(R.color.mycolor);
           
注:

getResources()

方法是由Activity提供

在xml中引用

android:background="@color/red" 
           

圖像疊加

通過前面介紹我們知道顔色一般都是四個通道(ARGB)的,其中(RGB)控制的是顔色,而A(Alpha)控制的是透明度。

因為我們的顯示屏是沒法透明的,是以最終顯示在螢幕上的顔色裡可以認為沒有Alpha通道。Alpha通道主要在兩個圖像混合的時候生效。

實際上,上述我們所說的透明效果,其實是通過圖像疊加原理來實作

圖像疊加有多種不同的模式,我們可以使用其他效果,比如說常見的橡皮檫功能

其實還可以有不同的混合模式供我們選擇,可以使用用

Paint.setXfermode()

,指定不同的PorterDuff.Mode

Paint paint =  new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));//設定xfermode
           

xfermode模式圖解:

Android自定義View學習(1)——基礎知識介紹

角度與弧度

機關換算:

Android自定義View學習(1)——基礎知識介紹

在常見的數學坐标系中角度增大方向為逆時針,

在預設的螢幕坐标系中角度增大方向為順時針。

Android自定義View學習(1)——基礎知識介紹

參考

  • 安卓自定義View基礎-角度與弧度
  • 安卓自定義View基礎-坐标系
  • 安卓自定義View基礎-顔色
  • Android自定義View教程目錄
  • Android開發——繪圖基礎 - Stars-one - 部落格園

提問之前,請先看提問須知

點選右側圖示發起提問

Android自定義View學習(1)——基礎知識介紹

或者加入QQ群一起學習

Android自定義View學習(1)——基礎知識介紹

TornadoFx學習交流群:1071184701

Android自定義View學習(1)——基礎知識介紹
Android自定義View學習(1)——基礎知識介紹

繼續閱讀