//1、創建一個手勢識別器
private GestureDetector mGestureDetector = new GestureDetector(getApplicationContext(),new MyOnGestureListener());
//3、將MotionEvent 事件傳給GestureDetector處理
// MotionEvent 可以來自OnTouchEvent(MotionEvent event) 或者來自OnTouchListener的onTouch(View view,MotionEvent event);
// 這裏使用來自OnTouchEvent(MotionEvent event)的效果是一樣的
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
//將事件傳遞給了GestureDetector 然後它內部將事件進行判斷識別 調用監聽器中的對應方法
//最終實現事件的處理
}
//2、實現一個 手勢識別器回到接口-----在裏面處理各個手勢對應的代碼
public class MyOnGestureListener extends GestureDetector.SimpleOnGestureListener {
//觸摸屏幕 點下 down
@Override
public boolean onDown(MotionEvent e) {
return super.onDown(e);
}
//手指擡起 單擊 up
@Override
public boolean onSingleTapUp(MotionEvent e) {
return super.onSingleTapUp(e);
}
//手指擡起以後一段時間(很短的時間) 沒有再點擊 就會判定爲只是單擊確認
//如果 在等待的時間內又點擊l一次 就是不會觸發該方法 那就觸發雙擊事件
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return super.onSingleTapConfirmed(e);
}
// 點擊事件的分類
//1、點擊立即擡起 onDown -->onSingleTapUp -->onSingleTapConfirmed
//2、點擊後沒有滑動慢點擡起 onDown --> onShowPress--> onSingleTapUp -->onSingleTapConfirmed
//3、點擊後沒有滑動很長時間才擡起
//onDown --> onShowPress--> onLongPress-->onSingleTapUp -->onSingleTapConfirmed
@Override
public void onShowPress(MotionEvent e) {
super.onShowPress(e);
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
}
// 雙擊的第二下Touch down時觸發
@Override
public boolean onDoubleTap(MotionEvent e) {
return super.onDoubleTap(e);
}
// 雙擊的第二下Touch down和up都會觸發,可用e.getAction()區分
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return super.onDoubleTapEvent(e);
}
// e1:第1個ACTION_DOWN MotionEvent
// e2:當前滑動到的位置的ACTION_MOVE MotionEvent
//distanceX distanceY xy方向滑動的距離
//在滑動的過程中多次調用
@Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return super.onScroll(e1, e2, distanceX, distanceY); } @Override // e1:第1個ACTION_DOWN MotionEvent // e2:最後一個ACTION_MOVE MotionEvent // velocityX:X軸上的移動速度,像素/秒 // velocityY:Y軸上的移動速度,像素/秒 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return super.onFling(e1, e2, velocityX, velocityY); } @Override public boolean onContextClick(MotionEvent e) { return super.onContextClick(e); } }
這裏有一個比較好的文章 : Android觸控屏幕Gesture(GestureDetector和SimpleOnGestureListener的使用教程)