Android坐標系、視圖坐標系與觸控事件(MotionEvent)

Ies71Z 8年前發布 | 8K 次閱讀 安卓開發 Android開發 移動開發

前言:

本篇文章講解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

 

 本文由用戶 Ies71Z 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!