前言:本篇文章講解Android坐標系、視圖坐標系與觸控事件(MotionEvent)
一. Android 的坐標系:####
在Android中,將屏幕左上角的定點座位Android坐標系的原點,從這個點向右是X軸得正方向,這個點向下為Y軸正方向:

系統(tǒng)提供了getLocationOnScreen(intlocation[])這樣的方法來獲取Android坐標系中 點的位置,即該視視圖左上角在Android坐標系中的坐標,另外在觸控事件中使用getRawX().getRawY()方法所獲取得坐標同樣是Android坐標系中的坐標:
getLocationOnScreen(intlocation[])方法:#####
private int[] locationPoint = new int[2];
//省略.....
view.getLocationOnScreen(locationPoint);
//省略.....
sb.append("length :" + locationPoint.length + " -- ");
for (int i : locationPoint) {
sb.append(i + "--");
}
//結果:length : 0 -- 152 --
//locationPoint[0]:為x該View在x軸得坐標,locationPoint=[1]為該View在Y軸的坐標
在觸控事件中使用getRawX() 與getRawY()方法:#####
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
downX = ev.getRawX();
downY = ev.getRawY();
break;
}
二.視圖坐標系:####
Android中還有一個視圖坐標系,讓是描述子視圖在父視圖中的位置。與Android坐標系比較相似的,視圖坐標系是以子視圖所在的父視圖左上角為原點,該原點向右為X軸正方向,向下為Y軸正方向:
在觸控事件中,可使用 getX(), getY()方法獲取得坐標即為視圖坐標系中的坐標

三.觸控事件 MotionEvent:
觸控事件,見明知意;下面是MotionEvent中封裝了一些常用的事件常量:
//觸控動作取消
public static final int ACTION_CANCEL = 3;
//單點觸控按下動作
public static final int ACTION_DOWN = 0;
//觸摸點移動動作
public static final int ACTION_MOVE = 2;
//觸摸動作超出邊界
public static final int ACTION_OUTSIDE = 4;
/** @deprecated */
@Deprecated
public static final int ACTION_POINTER_1_DOWN = 5;//多點觸控按下動作
/** @deprecated */
@Deprecated
public static final int ACTION_POINTER_1_UP = 6;//多點觸控抬起動作
/** @deprecated */
@Deprecated
public static final int ACTION_POINTER_2_DOWN = 261;
/** @deprecated */
@Deprecated
public static final int ACTION_POINTER_2_UP = 262;
通常會在onTouchEvent(MotionEvent event)或onInterceptTouchEvent(MotionEvent event)方法中通過event.getAction()獲取觸控事件類型 并進行對應邏輯處理
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
downX = ev.getRawX();
break;
case MotionEvent.ACTION_MOVE:
moveX = ev.getRawX();
break;
default:
break;
在觸控事件時經(jīng)常需要獲取坐標值與相對距離等 進行了一下總結:

View獲取坐標的方法:
getTop() : 獲取該View頂邊框到其父布局頂邊的距離;
getLeft() : 獲取該View左邊到框其父布局左邊的距離;
getRight() : 獲取該View右邊框到父布局左邊的距離 ;
getBottom : 獲取該View底部邊框到父布局頂部邊框的距離;
MotionEvent 獲取坐標的方法:
getX() : 獲取事件點擊位置所在控件左邊的距離;
getY() : 獲取事件點擊位置所在控件頂邊的距離;
getRawX() : 獲取事件點擊位置距離屏幕左邊的距離;
getRawY() : 獲取事件點擊位置距離屏幕頂邊的距離;
如有錯誤與建議感謝提出指正?。?/strong>