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

前言:本篇文章講解Android坐標系、視圖坐標系與觸控事件(MotionEvent)

一. Android 的坐標系:####

在Android中,將屏幕左上角的定點座位Android坐標系的原點,從這個點向右是X軸得正方向,這個點向下為Y軸正方向:

Android坐標系.png

系統(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()方法獲取得坐標即為視圖坐標系中的坐標

視圖坐標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;

在觸控事件時經(jīng)常需要獲取坐標值與相對距離等 進行了一下總結:

View坐標與距離3.png

View獲取坐標的方法:
getTop() : 獲取該View頂邊框到其父布局頂邊的距離;
getLeft() : 獲取該View左邊到框其父布局左邊的距離;
getRight() : 獲取該View右邊框到父布局左邊的距離 ;
getBottom : 獲取該View底部邊框到父布局頂部邊框的距離;

MotionEvent 獲取坐標的方法:
getX() : 獲取事件點擊位置所在控件左邊的距離;
getY() : 獲取事件點擊位置所在控件頂邊的距離;
getRawX() : 獲取事件點擊位置距離屏幕左邊的距離;
getRawY() : 獲取事件點擊位置距離屏幕頂邊的距離;

如有錯誤與建議感謝提出指正?。?/strong>

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容