,那么,這個(gè)類如何使用呢?以下是使用該類的一個(gè)范例:
private GestureDetector mGestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGestureDetector = new GestureDetector(this, new MyGestureListener());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
/* 有關(guān)上面的 onTouchEvent方法,我們可以直接判斷MotionEvent的類型,
對(duì)于手勢(shì)移動(dòng)僅僅捕獲ACTION_MOVE即可,
我們通過(guò)參數(shù)MotionEvent e1, MotionEvent e2,float distanceX, float distanceY可以獲取操作變化。
比如 distanceX > 0 向右邊移動(dòng),distanceX < 0 則向左邊,distanceY > 0 向上滾動(dòng), distanceY < 0 向下滾動(dòng)。
*/
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onSingleTapUp(MotionEvent ev) {
Log.d("onSingleTapUp",ev.toString());
return true;
}
@Override
public void onShowPress(MotionEvent ev) {
Log.d("onShowPress",ev.toString());
}
@Override
public void onLongPress(MotionEvent ev) {
Log.d("onLongPress",ev.toString());
}
}
更多的回調(diào)消息,方便的對(duì)用戶的動(dòng)作進(jìn)行響應(yīng)
public interface OnGestureListener {
// Touch down時(shí)觸發(fā), e為down時(shí)的MotionEvent
boolean onDown(MotionEvent e);
// 在Touch down之后一定時(shí)間(115ms)觸發(fā),e為down時(shí)的MotionEvent
void onShowPress(MotionEvent e);
// Touch up時(shí)觸發(fā),e為up時(shí)的MotionEvent
boolean onSingleTapUp(MotionEvent e);
// 滑動(dòng)時(shí)觸發(fā),e1為down時(shí)的MotionEvent,e2為move時(shí)的MotionEvent
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);
// 在Touch down之后一定時(shí)間(500ms)觸發(fā),e為down時(shí)的MotionEvent
void onLongPress(MotionEvent e);
// 滑動(dòng)一段距離,up時(shí)觸發(fā),e1為down時(shí)的MotionEvent,e2為up時(shí)的MotionEvent
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);
}
public interface OnDoubleTapListener {
// 完成一次單擊,并確定沒有二擊事件后觸發(fā)(300ms),e為down時(shí)的MotionEvent
boolean onSingleTapConfirmed(MotionEvent e);
// 第二次單擊down時(shí)觸發(fā),e為第一次down時(shí)的MotionEvent
boolean onDoubleTap(MotionEvent e);
// 第二次單擊down,move和up時(shí)都觸發(fā),e為不同時(shí)機(jī)下的MotionEvent
boolean onDoubleTapEvent(MotionEvent e);
}
解釋:雙擊的第二下Touch down時(shí)觸發(fā)
boolean onDoubleTapEvent(MotionEvent e)
解釋:雙擊的第二下Touch down和up都會(huì)觸發(fā),可用e.getAction()區(qū)分。
boolean onDown(MotionEvent e)
解釋:Touch down時(shí)觸發(fā)
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
解釋:Touch了滑動(dòng)一點(diǎn)距離后,up時(shí)觸發(fā)。
void onLongPress(MotionEvent e)
解釋:Touch了不移動(dòng)一直Touch down時(shí)觸發(fā)
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
解釋:Touch了滑動(dòng)時(shí)觸發(fā)。
void onShowPress(MotionEvent e)
解釋:Touch了還沒有滑動(dòng)時(shí)觸發(fā)
(與onDown,onLongPress比較,onDown只要Touch down一定立刻觸發(fā)。而Touchdown后過(guò)一會(huì)沒有滑動(dòng)先觸發(fā)onShowPress再是onLongPress。
所以Touchdown后一直不滑動(dòng),onDown->onShowPress->onLongPress這個(gè)順序觸發(fā)。
boolean onSingleTapConfirmed(MotionEvent e)
boolean onSingleTapUp(MotionEvent e)
解釋:上面這兩個(gè)函數(shù)都是在touch down后又沒有滑動(dòng)(onScroll),又沒有長(zhǎng)按(onLongPress),然后Touchup時(shí)觸發(fā)。
點(diǎn)擊一下非常快的(不滑動(dòng))Touchup:
onDown->onSingleTapUp->onSingleTapConfirmed
點(diǎn)擊一下稍微慢點(diǎn)的(不滑動(dòng))Touchup:
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed