GestureDetector_SimpleOnGestureListener

SimpleOnGestureListener類是GestureDetector提供給我們的一個更方便的響應不同手勢的類,它實現了OnGestureListener,OnDoubleTapListener兩個接口,該類是static class,也就是說它實際上是一個外部類,我們可以在外部繼承這個類,重寫裏面的手勢處理方法。

有些手勢動作我們用不到,但是還要重載。SimpleOnGestureListener類的出現爲我們解決了這個問題,如果你想“Detecting a Subset of Supported Gestures”,SimpleOnGestureListener是最好的選擇。

public class MyGesture extends Activity implements OnTouchListener {   
    private GestureDetector mGestureDetector;   
    public MyGesture() {   
        mGestureDetector = new GestureDetector(new MySimpleGesture());   
    }   
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        TextView tv = (TextView) findViewById(R.id.tv);   
        tv.setOnTouchListener(this);   
        tv.setFocusable(true);   
        tv.setClickable(true);   
        tv.setLongClickable(true);   
    }   
    public boolean onTouch(View v, MotionEvent event) {   
        if (event.getAction() == MotionEvent.ACTION_UP) {   
            Log.i("MyGesture", "MotionEvent.ACTION_UP");   
        }   
        return mGestureDetector.onTouchEvent(event);   
    }   
       
    // SimpleOnGestureListener implements GestureDetector.OnDoubleTapListener, GestureDetector.OnGestureListener  
    private class MySimpleGesture extends SimpleOnGestureListener {   
        // 雙擊的第二下Touch down時觸發    
        public boolean onDoubleTap(MotionEvent e) {   
            Log.i("MyGesture", "onDoubleTap");   
            return super.onDoubleTap(e);   
        }   
           
        // 雙擊的第二下Touch down和up都會觸發,可用e.getAction()區分   
        public boolean onDoubleTapEvent(MotionEvent e) {   
            Log.i("MyGesture", "onDoubleTapEvent");   
            return super.onDoubleTapEvent(e);   
        }   
           
        // Touch down時觸發    
        public boolean onDown(MotionEvent e) {   
            Log.i("MyGesture", "onDown");   
            return super.onDown(e);   
        }   
           
        // Touch了滑動一點距離後,up時觸發   
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {   
            Log.i("MyGesture", "onFling");   
            return super.onFling(e1, e2, velocityX, velocityY);   
        }   
           
        // Touch了不移動一直Touch down時觸發   
        public void onLongPress(MotionEvent e) {   
            Log.i("MyGesture", "onLongPress");   
            super.onLongPress(e);   
        }   
           
        // Touch了滑動時觸發   
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {   
            Log.i("MyGesture", "onScroll");   
            return super.onScroll(e1, e2, distanceX, distanceY);   
        }   
           
        /*  
         * Touch了還沒有滑動時觸發  
         * (1)onDown只要Touch Down一定立刻觸發  
         * (2)Touch Down後過一會沒有滑動先觸發onShowPress再觸發onLongPress  
         * So: Touch Down後一直不滑動,onDown -> onShowPress -> onLongPress這個順序觸發。  
         */  
        public void onShowPress(MotionEvent e) {   
            Log.i("MyGesture", "onShowPress");   
            super.onShowPress(e);   
        }   
  
        /*  
         * 兩個函數都是在Touch Down後又沒有滑動(onScroll),又沒有長按(onLongPress),然後Touch Up時觸發  
         * 點擊一下非常快的(不滑動)Touch Up: onDown->onSingleTapUp->onSingleTapConfirmed  
         * 點擊一下稍微慢點的(不滑動)Touch Up: onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed   
         */    
        public boolean onSingleTapConfirmed(MotionEvent e) {   
            Log.i("MyGesture", "onSingleTapConfirmed");   
            return super.onSingleTapConfirmed(e);   
        }   
        public boolean onSingleTapUp(MotionEvent e) {   
            Log.i("MyGesture", "onSingleTapUp");   
            return super.onSingleTapUp(e);   
        }   
    }   
}  

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