
"學(xué)而不思則罔,思而不學(xué)則殆"
????????????????????????????????????????????????????????————孔子
???????Android View體系作為Android基礎(chǔ)知識(shí)里面比較基礎(chǔ)也比較核心的部分,其重要性不比四大組件差多少,從本篇開(kāi)始將開(kāi)始整理View的相關(guān)知識(shí),形成系列。本篇主要就View的坐標(biāo)做介紹,在后續(xù)的文章里還會(huì)涉及到事件的分發(fā)、View的繪制等內(nèi)容。
View簡(jiǎn)介
???????View是Android里面所有控件的基類,ViewGroup也是繼承自View,我們常用的控件都是繼承自View,掌握好View的相關(guān)知識(shí),對(duì)后面的界面開(kāi)發(fā)有很大幫助。View這一塊內(nèi)容,展示是基礎(chǔ),交互才是精髓,常見(jiàn)的有點(diǎn)擊、長(zhǎng)按、滑動(dòng)等交互事件,點(diǎn)擊、長(zhǎng)按比較簡(jiǎn)單,滑動(dòng)事件離不開(kāi)坐標(biāo)點(diǎn),下面就坐標(biāo)角度來(lái)分析一下。
安卓里的坐標(biāo)系和數(shù)學(xué)坐標(biāo)系的區(qū)別
???????說(shuō)到坐標(biāo)系,大家最熟悉的還是數(shù)學(xué)里面最常用到的坐標(biāo)系,如下圖。在數(shù)學(xué)坐標(biāo)系里面,坐標(biāo)軸向上是y軸正方向,向右是x軸正方向。

???????再來(lái)看看我們安卓里面的坐標(biāo)系,如下圖。和數(shù)學(xué)坐標(biāo)系還是有區(qū)別的,向右是x軸正方向,向下是y軸的正方向,相當(dāng)于數(shù)學(xué)坐標(biāo)系上下顛倒了一下,在后續(xù)的開(kāi)發(fā)里不要理解錯(cuò)了。

???????在手機(jī)屏幕上坐標(biāo)軸的體現(xiàn)為,如下圖。假如粉紅色區(qū)域?yàn)槭謾C(jī)屏幕,屏幕的左上角是坐標(biāo)系的原點(diǎn)(0,0),沿左邊向下為y軸正方向,沿頂邊向右為x軸正方向。

安卓里的坐標(biāo)系
???????Android坐標(biāo)系主要分為兩種:Android坐標(biāo)、視圖坐標(biāo)。
??????????????a、Android坐標(biāo):Android坐標(biāo)是以屏幕的左上角為原點(diǎn),水平向右為x正方向,垂直向下為y軸正方向。
??????????????b、視圖坐標(biāo):視圖坐標(biāo)和Android坐標(biāo)相似,也是從原點(diǎn)水平向右代表x正方向,垂直向下代表y正方向,但是原點(diǎn)不再是屏幕的坐上角,而是父View的左上角作為原點(diǎn),如下圖所示。

相對(duì)坐標(biāo)和絕對(duì)坐標(biāo)的區(qū)別
???????我們通過(guò)一幅圖來(lái)了解相對(duì)坐標(biāo)和絕對(duì)坐標(biāo)的區(qū)別。如下圖:

View獲取自己坐標(biāo)的事件:
???????getLeft():當(dāng)前View的左邊離父控件左邊的距離;
???????getTop():當(dāng)前View的頂邊離父控件頂邊的距離;
???????getRight():當(dāng)前View的右邊距父控件左邊的距離;
???????getBottom():當(dāng)前View的底邊距父控件的頂邊的距離;
View獲取自身寬高:
???????getWidth():當(dāng)前View自身的寬度;
???????getHeight():當(dāng)前View自身的高度;
MotionEvent獲取坐標(biāo):
???????getX():當(dāng)前觸摸點(diǎn)距當(dāng)前View的左邊的距離;
???????getY():當(dāng)前觸摸點(diǎn)距當(dāng)前View的頂邊的距離;
???????getRawX():當(dāng)前觸摸點(diǎn)距屏幕左邊的距離;
???????getRawY():當(dāng)前觸摸點(diǎn)距屏幕的頂邊的距離;
???????這里getX()、getY()獲取到的就是視圖坐標(biāo)的坐標(biāo)點(diǎn),getRawX()、getRawY()獲取到的就是Android坐標(biāo)的坐標(biāo)點(diǎn)。結(jié)合上圖和這些相關(guān)的事件,很輕易就可以理解這兩種坐標(biāo)了。