您好,登錄后才能下訂單哦!
以前只知道控件的onTouchEvent()事件,它的動作有MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP;今天有個需求,要監聽控件的雙擊、拖動、滑動等事件,這時onTouchEvent()很明顯不能滿足我們的需求,經多方打聽,找到了今天的主角GestureDetector,下面就對它進行簡單的學習。
構造方法:
已過時的有2個,不推薦使用。
GestureDetector(GestureDetector.onGestureListener listener);
GestureDetector(GestureDetector.onGestureListener listener,Handler handler);
推薦使用。
GestureDeterctor(Context context,GestureDetector.onGestureListener listener);
GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler);
GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler,boolean unused);
參數handler主要用來執行延時操作時使用,參數unused暫時沒有使用。
從構成函數可以看出,當我們需要創建一個GestureDetector對象時,必須給它傳一個GestureDetector.onGestureListener對象,查看API之后,發現它是個接口(interface),創建GestureDetector.onGestureListener的對象時,必須實現一下幾個方法:
1、onDown(MotionEvent e);
當用戶按下時的回調。
2、onFling(MotionEvent e1,MontionEvent e2,float velocityX,float velocityY);
當用戶快速拖動,并離開屏幕時,控件還在滑動的回調。
3、onLongPress(MotionEvent e);
當用戶長按控件時的回調。
4、onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY);
當用戶拖著控件(控件本身并沒有動)滑動時的回調。
5、onShowPress(MotionEvent e);
當用戶按下,還沒有執行移動或者抬起的動作的回調。
6、onSingleTapUp(MotionEvent e);
用戶按下,立即抬起,沒有做其它動作時的回調。
有了這個監聽之后,我們還可以給GestureDetector設置雙擊監聽,使用的方法是:
mGestureDetector.setOnDoubleTapListener(GestureDetector.OnDoubleTapListener onDoubleListener);
參數是雙擊監聽的對象,GestureDetector.OnDoubleTapListener它也是一個接口(interface),創建它的對象時,也必須實現以下幾個方法。
1、onDoubleTap(MotionEvent e);
當用戶雙擊時回調。
2、onDoubleTapEvent(MotionEvent e);
雙擊間隔事件的回調。
3、onSingleTapConfirmed(MotionEvent e);
當用戶單擊時回調。
上面的兩個監聽,回調函數都是必須實現,有時候我們不需要監聽所有的事件,只對自己感興趣的事件進行監聽,GestureDetector有個內部類幫我們實現此功能GestureDetector.SimpleOnGestureListener,該類實現了GestureDetector.onGestureListener、GestureDetector.onDoubleTapListener、GestureDetector.onContextClickListener這三個接口,并實現了它們的方法,只不過是空實現,在我們需要這三個接口的時候,我們可以創建GestureDetector.SimpleOnGestureListener對象,然后需要監聽哪個事件,我們就重寫它的哪個方法,下面我把它的所有方法都實現了,其實和上邊兩個接口實現的方法是一樣。
GestureDetector.SimpleOnGestureListener mGestureDetector = new SimpleOnGestureListener(){ @Override public boolean onSingleTapUp(MotionEvent e) { return super.onSingleTapUp(e); } @Override public void onLongPress(MotionEvent e) { super.onLongPress(e); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return super.onScroll(e1, e2, distanceX, distanceY); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return super.onFling(e1, e2, velocityX, velocityY); } @Override public void onShowPress(MotionEvent e) { super.onShowPress(e); } @Override public boolean onDown(MotionEvent e) { return super.onDown(e); } @Override public boolean onDoubleTap(MotionEvent e) { return super.onDoubleTap(e); } @Override public boolean onDoubleTapEvent(MotionEvent e) { return super.onDoubleTapEvent(e); } @Override public boolean onSingleTapConfirmed(MotionEvent e) { return super.onSingleTapConfirmed(e); } };
只有理論沒有實踐,怎么行呢?這里我也寫了一個Demo,這個Demo是我從另一篇博客中抄的,文章的內容也是參考他的博客寫的,下面會把大神的那篇博客地址貼出來。
參考資料:Android GestureDetector用戶手勢檢測實例講解
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。