Android坐標系、視圖坐標系與觸控事件(MotionEvent)
前言:
本篇文章講解Android坐標系、視圖坐標系與觸控事件(MotionEvent)
一. Android 的坐標系:
在Android中,將屏幕左上角的定點座位Android坐標系的原點,從這個點向右是X軸得正方向,這個點向下為Y軸正方向:
Android坐標系.png
系統提供了 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;
}</code></pre>
二.視圖坐標系:
Android中還有一個視圖坐標系,讓是描述子視圖在父視圖中的位置。與Android坐標系比較相似的, 視圖坐標系是以子視圖所在的父視圖左上角為原點,該原點向右為X軸正方向 ,向下為Y軸正方向:
在觸控事件中,可使用 getX(), getY() 方法獲取得坐標即為視圖坐標系中的坐標

視圖坐標2.png
三.觸控事件 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;
在觸控事件時經常需要 獲取坐標值與相對距離 等 進行了一下總結:

View坐標與距離3.png
View獲取坐標的方法:
getTop() : 獲取該View頂邊框到其 父布局頂邊 的距離;
getLeft() : 獲取該View左邊到框其 父布局左邊 的距離;
getRight() : 獲取該View右邊框到 父布局左邊 的距離 ;
getBottom : 獲取該View底部邊框到 父布局頂部邊框 的距離;
MotionEvent 獲取坐標的方法:
getX() : 獲取事件點擊位置 所在控件左邊 的距離;
getY() : 獲取事件點擊位置 所在控件頂邊 的距離;
getRawX() : 獲取事件點擊位置距離 屏幕左邊 的距離;
getRawY() : 獲取事件點擊位置距離 屏幕頂邊 的距離;
來自:http://www.jianshu.com/p/678e30b60f4d