Android坐標系和視圖坐標系
Android中有兩種坐標系,分別稱之為Android坐標系和視圖坐標系硼端。而對應的也有一些相關的方法可以獲取坐標系中的坐標值。
Android坐標系
先來看一看Android坐標系是個什么樣子的管削。貼一張圖來說明蒜哀,如下:
如上圖所示彪置,Android坐標系以手機屏幕左上角的頂點為坐標原點拄踪,從該點向右為x軸正方向,從該點向下為y軸正方向悉稠。而觸控事件中宫蛆,使用getRawX()和getRawY()方法
獲取的坐標就是以這個坐標系為標準下的坐標值。
視圖坐標系
android中的另外一個坐標系叫做視圖坐標系的猛,它描述的是子視圖在父視圖中的位置。再貼一張圖來說明想虎,如下:
如上圖所示卦尊,視圖坐標系是以父視圖的左上角為坐標原點的。相應的原點向右為x軸正方向舌厨,原點向下為y軸正方向岂却。在觸控中,通過
getX()和getY()來獲取的坐標值就是視圖坐標系中的坐標值裙椭。
View的getX和getY
View 提供了如下 5 種方法獲取 View 的坐標:
1 . View.getTop()躏哩、View.getLeft()、View.getBottom()揉燃、View.getRight();//相對父容器
2 . View.getX()扫尺、View.getY();//getX()==getLeft()、getY==getTop()炊汤。
3 . View.getTranslationX()正驻、View.getTranslationY();
4 . View.getLocationOnScreen(int[] position);//一個控件在其父窗口中的坐標位置,在當前窗口內的絕對坐標
5 . View.getLocationInWindow(int[] position);//一個控件在其整個屏幕上的坐標位置
初學View時見到這個多個方法可能有點懵逼,下面我來根據(jù)編號一一介紹:
1. 這四個方法用于獲取View相對于父容器的坐標抢腐,如下圖
從上圖可知姑曙,可根據(jù)View的這四個坐標來獲取View的大小:
1 .View的Height值 = view.getBottom() - view.getTop();
2 .View的Width值 = view.getRight() - view.getLeft();
需要注意的是迈倍,這四個方法獲取的坐標表示的是View原始狀態(tài)時相對于父容器的坐標伤靠,對View進行平移操作并不會改變著四個方法的返回值。
2 . getX()與getY()方法獲取的是View左上角相對于父容器的坐標啼染,當View沒有發(fā)生平移操作時宴合,getX()==getLeft()、getY==getTop()提完。
3 . translationX與 translationY是View左上角相對于父容器的偏移量:translationX = getX() - getLeft(),當View未發(fā)生平移操作時形纺,translationX 與translationY都為0。
4 . 獲取View相對于整個屏幕的坐標徒欣。
5 . 獲取View相對于Window的坐標(忽略狀態(tài)欄及ActionBar)逐样。
上面介紹的是View獲取坐標的幾種方法,但是在實際開發(fā)中不僅需要獲取View的坐標,有時候還需要獲取用戶點擊時的坐標脂新。
MotionEvent的getX和getY
MotionEvent提供的方法:
getX() 獲取點擊事件距離控件左邊的距離挪捕,即視圖坐標
getY() 獲取點擊事件距離控件頂邊的距離,即視圖坐標
getRawX() 獲取到的是點擊事件距離整個屏幕左邊的距離争便,即絕對坐標
getRawY() 獲取到的是點擊事件距離整個屏幕頂邊的距離级零,即絕對坐標
getScrollY() 獲取 視圖坐標原點 到 視圖 滾出屏幕 的距離
getScrollX() 類似 同上
getX()和getY()獲取到的是相對于當前View左上角的坐標; getRawX和getRawY()獲取的是相對于屏幕左上角的坐標滞乙。 如下圖: