1. Android坐標(biāo)系
Android坐標(biāo)系如圖,
系統(tǒng)提供了getLocationOnScreen(inlocation[])方法來(lái)來(lái)獲取android坐標(biāo)系中國(guó)年點(diǎn)的位置,另外,在觸控事件中使用getRawX()吞歼、getRawY()方法所獲得的坐標(biāo)同樣時(shí)Android坐標(biāo)系中的坐標(biāo)
2. 視圖坐標(biāo)系
視圖坐標(biāo)系描述了子視圖在父視圖中的位置關(guān)系,具體如圖,在觸控事件中嚼酝,通過(guò)getX()、getY()所獲得的坐標(biāo)就是視圖坐標(biāo)系中的坐標(biāo)竟坛。
3. 觸控事件--MotionEvent
- MotionEvent中封裝了一些常用的事件常量闽巩,它定義了觸控事件的不同類型。
//單點(diǎn)觸摸按下動(dòng)作 public static final int ACTION_DOWN = 0; //單點(diǎn)觸摸離開(kāi)動(dòng)作 public static final int ACTION_UP = 1; //觸摸點(diǎn)移動(dòng)動(dòng)作 public static final int ACTION_MOVE = 2; //觸摸動(dòng)作取消 public static final int ACTION_CANCEL = 3; //觸摸動(dòng)作超出邊界 public static final int ACTION_OUTSIDE = 4; //多點(diǎn)觸摸按下動(dòng)作 public static final int ACTION_POINTER_DOWN = 5;?? //多點(diǎn)離開(kāi)動(dòng)作??? public static final int ACTION_POINTER_UP = 6;
- 通常情況下會(huì)在onTouchEvent(MotionEvent event)方法中通過(guò)event.getAction()方法來(lái)獲取觸控事件的類型担汤,并使用switch-case方法來(lái)進(jìn)行篩選涎跨。大致模版如下:
int x = (int) event.getX(); int y = (int) event.getY(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: //處理輸入按下的事件 break; case MotionEvent.ACTION_MOVE: //處理輸入的移動(dòng)事件 break; case MotionEvent.ACTION_UP: //處理輸入的離開(kāi)事件 break; }
- 此外,安卓還提供了豐富的API來(lái)獲取坐標(biāo)值崭歧,相對(duì)距離等隅很,具體如圖:
這些方法可以分成如下兩類:
- View提供的獲取坐標(biāo)方法
getTop(): 獲取view自身的頂部到其父布局頂部的距離;
getLeft():獲取view自身左邊到其父布局左邊的距離率碾;
getRight(): 獲取view自身右邊到其父布局左邊的距離叔营;
getBottom(): 獲取view自身底部到其父布局頂部的距離;
MotionEvent提供的方法
getX(): 獲取觸摸點(diǎn)距離控件左邊的距離所宰,即視圖坐標(biāo)审编。
getY(): 獲取觸摸點(diǎn)距離控件定邊的距離,即視圖坐標(biāo)歧匈。
getRawX: 獲取觸摸點(diǎn)距離屏幕左邊的距離垒酬,即絕對(duì)坐標(biāo)。
getRawY: 獲取觸摸點(diǎn)距離屏幕頂邊的距離,即絕對(duì)坐標(biāo)勘究。