1. 觸摸屏幕時的事件監(jiān)聽方法
當用戶觸摸到屏幕時浑彰,觸摸監(jiān)聽事件就會被觸發(fā)。
我們通臣吠粒可以通過重寫 onTouchEvent ()
方法或實現(xiàn) OnTouchListener
接口的 onTouch()
方法來達到監(jiān)聽觸摸事件的功能赖钞。
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
...
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
以上兩種方式的區(qū)別是,onTouchListener 的 onTouch() 方法優(yōu)先級比 onTouchEvent() 高芦倒,會先觸發(fā)。
假如 onTouch() 方法返回 false 會接著觸發(fā) onTouchEvent()不翩,反之 onTouchEvent() 方法不會被調(diào)用兵扬。
內(nèi)置諸如 click 事件的實現(xiàn)等等都基于 onTouchEvent(),假如 onTouch 返回 true口蝠,這些事件將不會被觸發(fā)器钟。
然而,對于需要處理一些復雜的手勢妙蔗,比如要根據(jù)用戶觸摸的軌跡去判斷是什么手勢傲霸。Android sdk 為我們提供了 GestureDetector
類,通過這個類我們可以識別很多的手勢眉反。
2. GestureDetector 類
GestureDetector 類對外主要提供了:
- OnGestureListener 接口昙啄;
- OnDoubleTapListener 雙擊接口;
- SimpleOnGestureListener 類(實現(xiàn)了類內(nèi)的三個接口)禁漓。
當屏幕上發(fā)生特定的觸摸事件跟衅,就會去回調(diào)GestureDector.OnGestureListener
和 GestureDetector.OnDoubleTapListener
接口中相應的回調(diào)函數(shù)來監(jiān)測各樣的手勢和事件,并且通知用戶播歼。我們通過實現(xiàn)這些接口,并重寫這些方法的具體實現(xiàn)掰读。
SimpleOnGestureListener
實現(xiàn)了 OnGestureListener
秘狞,OnDoubleTapListener
,OnContextClickListener
接口蹈集,類內(nèi)重寫接口中的所有方法烁试,但是都是空實現(xiàn),返回的布爾值都是 false拢肆。主要作用是方便我們繼承這個類有選擇的復寫回調(diào)方法减响,而不是實現(xiàn)接口去重寫所有的方法。
2.1 OnGestureListener 類
OnGestureListener 有下面幾個動作:
-
onDown
-按下:剛剛手指接觸到觸摸屏的那一剎那郭怪,就是觸的那一下支示; -
onShowPress
-按住:手指按在觸摸屏上鄙才,它的時間范圍在按下起效颂鸿,在長按之前; -
onSingleTapUp
-抬起:手指離開觸摸屏的那一剎那攒庵; -
onScroll
-滾動:手指在觸摸屏上滑動嘴纺; -
onLongPress
-長按:手指按在持續(xù)一段時間败晴,并且沒有松開; -
onFling
-拋擲:手指在觸摸屏上迅速移動栽渴,并松開的動作尖坤。
private final GestureDetector.OnGestureListener mGestureListener = new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent motionEvent) {
return false;
}
@Override
public void onShowPress(MotionEvent motionEvent) {
}
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
return false;
}
@Override
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
return false;
}
@Override
public void onLongPress(MotionEvent motionEvent) {
}
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
return false;
}
};
使用 OnGestureListener
接口,需要重載接口所有的方法闲擦,適合監(jiān)聽所有的手勢慢味。但有時我們用不到某個方法,但還要重載佛致。這個時候 SimpleOnGestureListener
類的出現(xiàn)為我們解決了問題贮缕。
2.2 SimpleOnGestureListener 類
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return super.onDown(e);
}
//...
}
參考文章
Android 觸摸及手勢操作GestureDetector
觸摸事件與手勢監(jiān)聽--Android GestureDetector詳解
本文章只是作為自己學習和總結所用,如有使用不當之處可隨時@我俺榆,謝謝