Android 座標系與檢視座標系圖解
阿新 • • 發佈:2019-01-09
1.Android座標系
在Android中,將螢幕的最左上角頂點作為Android座標系的原點
從原點向右是X軸的正方向,從原點向下是Y軸的正方向
View提供了getLocationOnScreen( int[] location)方法來獲取在整個螢幕內的絕對座標,該座標值為View左上角的座標。注意該View的座標值是從螢幕左上角開始獲取的,所以也包括了通知欄的高度
該方法的具體實現
/**
* <p>Computes the coordinates of this view on the screen. The argument
* must be an array of two integers. After the method returns, the array
* contains the x and y location in that order.</p>
*
* @param location an array of two integers in which to hold the coordinates
*/
public void getLocationOnScreen(@Size(2) int[] location) {
getLocationInWindow(location);
final AttachInfo info = mAttachInfo;
if (info != null) {
location[0] += info.mWindowLeft;
location[1 ] += info.mWindowTop;
}
}
可看到,傳入的int[]陣列中,location[0]代表的是X軸座標,location[1]代表的Y軸座標
這裡還有個getLocationInWindow方法,作用是獲取View在當前視窗內的絕對座標
我們在通過MotionEvent類中的getRawX(),getRawY()方法獲取的座標同樣也屬於這種Android座標系裡的座標
2.檢視座標系
Android中的檢視座標系,描述的是子檢視與其父檢視中的位置關係
和Android座標系一樣,檢視座標系也是以原點向右為X軸正方向,以原點向下為Y軸正方向,與Android座標系不同的是,檢視座標系的原點是以父檢視左上角的位置為原點
如上圖中,對於Button來說,父檢視LinearLayout左上角就是檢視座標系的原點(0,0)
我們通過MotionEvent類中的getX()、getY()方法所獲得的就是檢視座標系的座標
在Android中,系統提供了很多獲取座標值、相對距離等方法
View提供的API
- getTop():獲取View頂邊到其父佈局頂邊的距離
- getLeft():獲取View左邊到其父佈局左邊的距離
- getRight():獲取View右邊到其父佈局左邊的距離
- getBottom():獲取View底邊到其父佈局頂邊的距離
MotionEvent提供的API
- getX():獲取點選位置離View左邊的距離
- getY():獲取點選位置離View頂邊的距離
- getRawX():獲取點選位置離螢幕左邊的距離
- getRawY():獲取點選位置離螢幕頂邊的距離