1. 程式人生 > >Android 座標系與檢視座標系圖解

Android 座標系與檢視座標系圖解

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():獲取點選位置離螢幕頂邊的距離