"學(xué)而不思則罔蔗坯,思而不學(xué)則殆"
????????????????????????????????????????????????????????————孔子
???????Android View體系作為Android基礎(chǔ)知識里面比較基礎(chǔ)也比較核心的部分,其重要性不比四大組件差多少搂擦,從本篇開始將開始整理View的相關(guān)知識雳灵,形成系列。本篇主要就View的坐標(biāo)做介紹糊肠,在后續(xù)的文章里還會涉及到事件的分發(fā)、View的繪制等內(nèi)容遗锣。
View簡介
???????View是Android里面所有控件的基類货裹,ViewGroup也是繼承自View,我們常用的控件都是繼承自View精偿,掌握好View的相關(guān)知識弧圆,對后面的界面開發(fā)有很大幫助赋兵。View這一塊內(nèi)容,展示是基礎(chǔ)搔预,交互才是精髓霹期,常見的有點擊、長按拯田、滑動等交互事件历造,點擊、長按比較簡單船庇,滑動事件離不開坐標(biāo)點吭产,下面就坐標(biāo)角度來分析一下。
安卓里的坐標(biāo)系和數(shù)學(xué)坐標(biāo)系的區(qū)別
???????說到坐標(biāo)系鸭轮,大家最熟悉的還是數(shù)學(xué)里面最常用到的坐標(biāo)系臣淤,如下圖。在數(shù)學(xué)坐標(biāo)系里面窃爷,坐標(biāo)軸向上是y軸正方向邑蒋,向右是x軸正方向。
???????再來看看我們安卓里面的坐標(biāo)系按厘,如下圖医吊。和數(shù)學(xué)坐標(biāo)系還是有區(qū)別的,向右是x軸正方向刻剥,向下是y軸的正方向遮咖,相當(dāng)于數(shù)學(xué)坐標(biāo)系上下顛倒了一下,在后續(xù)的開發(fā)里不要理解錯了造虏。
???????在手機屏幕上坐標(biāo)軸的體現(xiàn)為御吞,如下圖。假如粉紅色區(qū)域為手機屏幕漓藕,屏幕的左上角是坐標(biāo)系的原點(0,0)陶珠,沿左邊向下為y軸正方向,沿頂邊向右為x軸正方向享钞。
安卓里的坐標(biāo)系
???????Android坐標(biāo)系主要分為兩種:Android坐標(biāo)揍诽、視圖坐標(biāo)。
??????????????a栗竖、Android坐標(biāo):Android坐標(biāo)是以屏幕的左上角為原點暑脆,水平向右為x正方向,垂直向下為y軸正方向狐肢。
??????????????b添吗、視圖坐標(biāo):視圖坐標(biāo)和Android坐標(biāo)相似,也是從原點水平向右代表x正方向份名,垂直向下代表y正方向碟联,但是原點不再是屏幕的坐上角妓美,而是父View的左上角作為原點,如下圖所示鲤孵。
相對坐標(biāo)和絕對坐標(biāo)的區(qū)別
???????我們通過一幅圖來了解相對坐標(biāo)和絕對坐標(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)前觸摸點距當(dāng)前View的左邊的距離;
???????getY():當(dāng)前觸摸點距當(dāng)前View的頂邊的距離漆际;
???????getRawX():當(dāng)前觸摸點距屏幕左邊的距離淆珊;
???????getRawY():當(dāng)前觸摸點距屏幕的頂邊的距離;
???????這里getX()奸汇、getY()獲取到的就是視圖坐標(biāo)的坐標(biāo)點施符,getRawX()、getRawY()獲取到的就是Android坐標(biāo)的坐標(biāo)點擂找。結(jié)合上圖和這些相關(guān)的事件戳吝,很輕易就可以理解這兩種坐標(biāo)了。