Android中的視窗座標體系和螢幕的觸控事件
Android座標系
在物理學中,要描述一個物體的運動,就必須選定一個參考系。所謂滑動,正是相對於參考系的運動。在Android中,將螢幕最左上角的頂點作為Android座標系的原點,從這個點向右是X軸正方向,從這個點向下是Y軸的正方向,如下圖所示。
Android座標系
系統提供了getLocationOnScreen(int location[])這樣的方法來獲取Android座標系中點的位置,即該檢視左上角在Android座標系的座標。另外,在觸控事件中使用getRawX()、getRawY()方法所獲得的座標同樣是Android座標系中的座標。
檢視座標系
Android中除了上面所說的這種座標系之外,還有一個檢視座標系,它描述了子檢視在父檢視中的位置關係。這兩種座標系並不矛盾也不復雜,他們的作用是相輔相成的。與Android座標系類似,檢視座標系同樣是以原點向右為X軸正方向,以原點向下為Y軸正方向,只不過在檢視座標系中,原點不再是Android座標系中的螢幕最左上角,而是以父檢視左上角為座標原點,如下圖所示。
檢視座標系
在觸控事件中,通過getX()、getY()所獲得的座標就是檢視座標系中的座標。
觸控事件——MotionEvent
觸控事件MotionEvent在使用者互動中,站著舉足輕重的地位,學好觸控事件是掌握後序內容的基礎。首先,來看看MotionEvent中封裝的一些常用的事件常量,它定義了觸控事件的不同型別。
// 單點觸控按下動作
public static final int ACTION_DOWN = 0;
// 單點觸控離開動作
public static final int ACTION_UP = 1;
// 觸控點移動動作
public static final int ACTION_MOVE = 2;
// 觸控動作取消
public static final int ACTION_CANCEL = 3;
// 觸控動作超出邊界
public static final int ACTION_OUTSIDE = 4;
// 多點觸控按下動作
public static final int ACTION_POINTER_DOWN = 5;
// 多點離開動作
public static final int ACTION_POINTER_UP = 6;
通常情況下,我們會在onTouchEvent(MotionEvent event)方法中通過event.getAction()方法來獲取觸控事件的型別,並使用switch-case方法來進行篩選,這個程式碼的模式基本固定,如下所示:
@Override
public boolean onTouchEvent(MotionEvent event) {
// 獲取當前輸入點的X、Y座標(檢視座標)
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 處理輸入的按下事件
break;
case MotionEvent.ACTION_MOVE:
// 處理輸入的移動事件
break;
case MotionEvent.ACTION_UP:
// 處理輸入的離開事件
break;
}
return true;
}
在不涉及多點操作的情況下,通常可以使用以上程式碼來完成觸控事件的監聽,不過這裡只是一個程式碼模板,後面我們會在觸控事件中完成具體的邏輯。
在Android中,系統提供了非常多的方法來獲取座標值、相對距離等。方法豐富固然好,但也給初學者帶來了很多困惑,不知道在什麼情況下使用什麼方法,下面總結了一些API,結合Android座標系來看看該如何使用它們,如下圖所示。
獲取座標值、相對距離
這些方法可以分成如下兩個類別:
- View提供的獲取座標方法
getTop():獲取到的是View自身的頂邊到其父佈局頂邊的距離。
getLeft():獲取到的是View自身的左邊到其父佈局左邊的距離。
getRight():獲取到的是View自身的右邊到其父佈局左邊的距離。
getBottom():獲取到的是View自身的底邊到其父佈局頂邊的距離。
- MotionEvent提供的方法
getX():獲取點選事件距離控制元件左邊的距離,即檢視座標。
getY():獲取點選事件距離控制元件頂邊的距離,即檢視座標。
getRawX():獲取點選事件距離整個螢幕左邊的距離,即絕對座標。
getRawY():獲取點選事件距離整個螢幕頂邊的距離,即絕對座標。
相關文章
- Unity觸控式螢幕觸控事件定義Unity事件
- Android 觸控式螢幕驅動Android
- Android中觸控事件的傳遞機制Android事件
- 「技術乾貨」工業觸控式螢幕之觸控式螢幕分類(連載)
- WPF --- 觸控式螢幕下的兩個問題
- 多點觸控式螢幕驅動
- PLC與觸控式螢幕通訊
- GhostTouch:針對智慧觸控式螢幕的非接觸性攻擊
- 觸控事件獲取座標事件
- 開發板觸控式螢幕測試
- 觸控式螢幕響應速度效能分析
- linux 觸控式螢幕驅動編寫Linux
- 物體物件在螢幕中的座標及滑鼠座標物件
- Android觸控事件傳遞機制Android事件
- 觸控板觸控式螢幕禁止手指縮放,這麼處理才行
- android觸控事件分發機制,曾困惑你我的地方Android事件
- PLC同時連線多個觸控式螢幕和電視機顯示器解決方案
- Android View 的事件體系AndroidView事件
- 【Android Developers Training】 67. 響應觸控事件AndroidDeveloperAI事件
- 研究發現利用筆和紙記憶勝過觸控筆和電子螢幕
- PC系統的觸控式螢幕---IPC377G怎麼下載到PC電腦
- win10 macbook的觸控式螢幕右擊失靈怎麼辦Win10Mac
- JS觸控事件JS事件
- ScrollView 觸控事件View事件
- 短視訊平臺原始碼,Android獲取螢幕的高度和寬度原始碼Android
- win10觸控板如何校準_windows10怎樣校準觸控式螢幕Win10Windows
- 使用Powershell對目標進行螢幕監控
- .NET 白板書寫延遲-觸控式螢幕報點率
- 如何在觸控式螢幕組態軟體上實時監控農村汙水處理PLC
- win10 thinkpad怎麼關閉觸控式螢幕_w10thinkpad如何關掉觸控Win10ThinkPad
- orientationchange 螢幕旋轉事件事件
- Android螢幕適配總結和思考Android
- iPhone XS怎麼開啟輔助觸控小白點?蘋果iPhone螢幕輔助觸控使用教程iPhone蘋果
- 開發觸控式螢幕的頁面時應該注意些什麼問題?
- 羅克韋爾AB PVPlus觸控式螢幕使用者自動登出的方法
- android 喚醒螢幕Android
- android 螢幕適配Android
- 大領導給小明安排任務——Android觸控事件Android事件
- 安卓觸控事件與單擊事件的區別安卓事件