android 手勢操作GestureDetector

利用觸摸屏的Fling、Scroll等Gesture(手勢)操作來操作會使得應用程序的用戶體驗大大提升,比如用Scroll手勢在 瀏覽器中滾屏,用Fling在閱讀器中翻頁等。在Android系統中,手勢的識別是通過 GestureDetector.OnGestureListener接口來實現的,舉例說明:

 

  1. public class ActivityMain extends Activity implements GestureDetector.OnGestureListener { 
  2.  
  3.     GestureDetector detector; 
  4.  
  5.     /** 
  6.      * Called when the activity is first created. 
  7.      */ 
  8.     @Override 
  9.     public void onCreate(Bundle savedInstanceState) { 
  10.         super.onCreate(savedInstanceState); 
  11.         setContentView(R.layout.main); 
  12.         //構造GestureDetector;Context context, OnGestureListener listener 
  13.         detector = new GestureDetector(thisthis); 
  14.  
  15.         detector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() { 
  16. //短快的點擊算一次單擊 
  17.             @Override 
  18.             public boolean onSingleTapConfirmed(MotionEvent e) { 
  19.                 System.out.println("onSingleTapConfirmed"); 
  20.                 return false
  21.             } 
  22. //雙擊時產生一次 
  23.             @Override 
  24.             public boolean onDoubleTap(MotionEvent e) { 
  25.                 System.out.println("onDoubleTap"); 
  26.                 return false
  27.             } 
  28.   //雙擊時產生兩次 
  29.             @Override 
  30.             public boolean onDoubleTapEvent(MotionEvent e) { 
  31.                 System.out.println("onDoubleTapEvent"); 
  32.                 return false
  33.             } 
  34.         }); 
  35.     } 
  36.  
  37.     @Override 
  38.     public boolean onTouchEvent(MotionEvent event) { 
  39.         return detector.onTouchEvent(event); 
  40.     } 
  41. // 用戶輕觸觸摸屏,由1個MotionEvent ACTION_DOWN觸發 
  42.     @Override 
  43.     public boolean onDown(MotionEvent e) { 
  44.         System.out.println("onDown"); 
  45.         return false
  46.     } 
  47. // 用戶輕觸觸摸屏,尚未鬆開或拖動,由一個1個MotionEvent ACTION_DOWN觸發    
  48. // 注意和onDown()的區別,強調的是沒有鬆開或者拖動的狀態 
  49.     @Override 
  50.     public void onShowPress(MotionEvent e) { 
  51.  
  52.     } 
  53. //用戶(輕觸觸摸屏後)鬆開,由一個1個MotionEvent ACTION_UP觸發 
  54.     @Override 
  55.     public boolean onSingleTapUp(MotionEvent e) { 
  56.         System.out.println("onSingleTapUp"); 
  57.         return false
  58.     } 
  59. // 用戶按下觸摸屏,並拖動,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE觸發 
  60.     @Override 
  61.     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
  62.         System.out.println("onScroll"); 
  63.         return false
  64.     } 
  65. // 用戶長按觸摸屏,由多個MotionEvent ACTION_DOWN觸發 
  66.     @Override 
  67.     public void onLongPress(MotionEvent e) { 
  68.         System.out.println("onLongPress" + e.getEventTime()); 
  69.     } 
  70. //用戶按下觸摸屏、快速移動後鬆開,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE, 1個ACTION_UP觸發 
  71.     @Override 
  72.     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
  73.         System.out.println("onFling: " + (e1.getX() - e2.getX()) + " " + (e1.getY() - e2.getY()) + " " + velocityX + " " + velocityY); 
  74.         System.out.println(e1.getY()); 
  75.         return false
  76.     } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章