安卓自定義View基礎 座標系,角度弧度,顏色

2022-07-17 07:09:12 字數 4352 閱讀 8493

1.座標系

2.角度弧度

3.顏色

由於移動裝置一般定義螢幕左上角為座標原點,向右為x軸增大方向,向下為y軸增大方向, 所以在手機螢幕上的座標系與數學中常見的座標系是稍微有點差別的,詳情如下:

ps:其中的∠a 是對應的,注意y軸方向!

實際螢幕上的預設座標系如下:

ps: 假設其中棕色部分為手機螢幕

注意:view的座標系統是相對于父控制項而言的.

gettop();       //

獲取子view左上角距父view頂部的距離

getleft(); //

獲取子view左上角距父view左側的距離

getbottom(); //

獲取子view右下角距父view頂部的距離

getright(); //

獲取子view右下角距父view左側的距離

如下圖所示:

event.getx();       //

觸控點相對於其所在元件座標系的座標

event

.gety();

event.getrawx(); //

觸控點相對於螢幕預設座標系的座標

event.getrawy();

如下圖所示:

ps:其中相同顏色的內容是對應的,其中為了顯示方便,藍色箭頭向左稍微偏移了一點.

序號要點

1在數學中常見的座標系與螢幕預設座標系的差別

2view的座標系是相對于父控制項而言的

3motionevent中get和getraw的區別

角度和弧度一樣都是描述角的一種度量單位,下面是它們的定義:

名稱定義

角度兩條射線從圓心向圓周射出,形成乙個夾角和夾角正對的一段弧。當這段弧長正好等於圓周長的360分之一時,兩條射線的夾角的大小為1度.

弧度兩條射線從圓心向圓周射出,形成乙個夾角和夾角正對的一段弧。當這段弧長正好等於圓的半徑時,兩條射線的夾角大小為1弧度.

如圖:

圓一周對應的角度為360度(角度),對應的弧度為2π弧度。

故得等價關係:360(角度) = 2π(弧度) ==> 180(角度) = π(弧度)

由等價關係可得如下換算公式:

rad 是弧度, deg 是角度

公式

例子rad = deg x π / 180

2π = 360 x π / 180

deg = rad x 180 / π

360 = 2π x 180 / π

維基百科的公式:

rad 是弧度, deg 是角度

由於預設螢幕座標系和常見數學座標系的小差別(座標系問題點這裡),所以在角上必然也會存在一些區別,例如:

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

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

顏色安卓支援的顏色模式:

顏色模式

備註argb8888

四通道高精度(32位)

argb4444

四通道低精度(16位)

rgb565

螢幕預設模式(16位)

alpha8

僅有透明通道(8位)

ps:其中字母表示通道型別,數值表示該型別用多少位二進位制來描述。如argb8888則表示有四個通道(argb),每個對應的通道均用8位來描述。

注意:我們常用的是argb8888和argb4444,而在所有的安卓裝置螢幕上預設的模式都是rgb565,請留意這一點。

以argb8888為例介紹顏色定義:

型別解釋

0(0x00)

255(0xff)

a(alpha)

透明度透明

不透明r(red)

紅色無色

紅色g(green)

綠色無色

綠色b(blue)

藍色無色

藍色其中 a r g b 的取值範圍均為0~255(即16進製制的0x00~0xff)

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

rgb 從0x00到0xff表示顏色從淺到深。

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

int color = color.gray;     //

灰色

由於color類提供的顏色僅為有限的幾個,通常還是用argb值進行表示。

int color = color.argb(127, 255, 0, 0);   //

半透明紅色

int color = 0xaaff0000; //

帶有透明度的紅色

在/res/values/color.xml 檔案中如下定義:

<?xml version="

1.0" encoding="

utf-8

"?>

"red

">#ff0000

"green

">#00ff00

詳解: 在以上xml檔案中定義了兩個顏色,紅色和綠色,是沒有alpha(透明)通道的。

定義顏色以『#』開頭,後面跟十六進製制的值,有如下幾種定義方式:

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

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

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

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

int color = getresources().getcolor(r.color.mycolor);

android:background="@color/red"     //引用在/res/values/color.xml 中定義的顏色

android:background="#ff0000" //建立並使用顏色

顏色都是用rgb值定義的,而我們一般是無法直觀的知道自己需要顏色的值,需要借用取色工具直接從或者其他地方獲取顏色的rgb值。

簡單的取色調色工具,可以從螢幕取色,非常小而精簡。

功能更加強大的工具:picpick。

picpick具備了擷取全屏、活動視窗、指定區域、固定區域、手繪區域功能,支援滾動截圖,螢幕取色,支援雙顯示器,具備白板、螢幕標尺、直角座標或極座標顯示與測量,具備強大的影象編輯和標註功能。

點選這裡獲取picpick

sip作為mac上的取色工具,也是十分優秀的,除了螢幕取色外還配備了不同型別的調色盤,並且支援將顏色格式化為任何常用的格式。

安卓自定義View基礎 座標系

由於移動裝置一般定義螢幕左上角為座標原點,向右為x軸增大方向,向下為y軸增大方向,所以在手機螢幕上的座標系與數學中常見的座標系是稍微有點差別的,詳情如下 ps 其中的 a 是對應的,注意y軸方向!實際螢幕上的預設座標系如下 ps 假設其中棕色部分為手機螢幕 注意 view的座標系統是相對于父控制項而...

安卓自定義View 座標系篇

由於移動裝置一般定義螢幕左上角為座標原點,向右為x軸增大方向,向下為y軸增大方向,所以在在手機螢幕上的座標系與數學中常見的座標繫在y軸的方向上是相反的。如下圖 下圖中的 是對應的 實際螢幕上的預設座標系如下 其中棕色部分為手機螢幕 注意 view的座標系是相對于父控制項而言的 gettop 獲取子v...

自定義View之Android座標系

自定義控制項的繪製離不開android座標系。本篇詳細記錄android座標系。android座標系 如上圖所示,方框代表的是手機螢幕,水平向右為x軸,垂直向下為y軸,y軸的座標越向下越大,座標系原點是螢幕左上角。上 釋了螢幕中的view獲取四個邊距的方法。子view的四個方法獲得的值是相對于父vi...