簡介
在Android內要偵測使用者在觸控螢幕上的動作,例如:點擊,滑動,放開等等,可以透過重載Activity
的onTouchEvent()
來達到。
加入onTouchEvent()方法
重載一個類別的方法除了直接使用鍵盤輸入之外,你也可以透過Eclipse編輯器來幫你建立重載方法的框架。在你要重載的類別原始碼範圍內任意地方點擊滑鼠右鍵後選擇Source->Override/Implement Methods...選項,接著找出在類別下你要重載的方法,最下面可以決定重載的方法原始碼在類別內位置,確定後點擊「OK」按鈕,Eclipse就會幫你產生出該方法的框架程式碼了。


@Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return super.onTouchEvent(event); }
MotionEvent
裡面最重要的就是系統傳遞過來的MotionEvent
物件,所有觸控的動作,觸控點的位置,包括多點觸動都是透過該物件。常用的方法如下:
getAction() | 取得目前觸控的動作,值有以下:
|
getActionMasked() | 取得目前觸控的動作,多點觸控用,值有以下:
|
getX(), getY() | 取得觸控事件發生時,手指的座標 |
getX(index), getY(index) | 在多點觸控當中,透過指定觸控點索引值,可以取得該點的座標 |
getPressure() | 在有支援按壓螢幕上可以取得按下的壓力值,按壓的單位取決於該裝置的驅動程式。 |
getDownTime() | 按下開始的時間 |
getEventTime() | 事件結束時間(getDownTime()-getEventTime()可以得到按壓的時間長度) |
getPointerCount() | 取得目前有幾個點被按壓(也就是有幾個手指按在螢幕上) |
getActionIndex() | 取得目前MotionEvent 為哪一個觸控點發出的 |
@Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: Log.d("test", "觸控開始"); break; case MotionEvent.ACTION_UP: Log.d("test", "觸控結束"); break; case MotionEvent.ACTION_MOVE: Log.d("test", "觸控移動中, x=" + event.getX() + ", y=" + event.getY()); break; case MotionEvent.ACTION_CANCEL: Log.d("test", "觸控事件被取消了"); break; case MotionEvent.ACTION_OUTSIDE: Log.d("test", "觸控超出螢幕邊界了"); break; } return true; }
注意:
當onTouchEvent()
的回傳值為super.onTouchEvent(event);
父類別方法的時候,會回傳false,代表你沒有處理這個事件,更重要的,這代表你對這個事件和其接下來的相關事件(例如:手勢、滑動、離開觸動)螢幕都沒有興趣,所以你將不會收到接下來的相關事件。所以如果你需要接下來的相關事件,必須改為回傳true。