天天看點

android手勢識别總結 GestureDetector

Android手勢類簡述

android手勢識别總結

GestureDetector的工作原理是,當我們接收到使用者觸摸消息時,将這個消息交給GestureDetector去加工,我們通過設定偵聽器獲得GestureDetector處理後的手勢。

GestureDetector提供了兩個偵聽器接口,OnGestureListener處理單擊類消息,OnDoubleTapListener處理輕按兩下類消息。

    OnGestureListener的接口有這幾個:

// 單擊,觸摸屏按下時立刻觸發 

abstract boolean onDown(MotionEvent e); 

// 擡起,手指離開觸摸屏時觸發(長按、滾動、滑動時,不會觸發這個手勢) 

abstract boolean onSingleTapUp(MotionEvente); 

// 短按,觸摸屏按下後片刻後擡起,會觸發這個手勢,如果迅速擡起則不會 

abstract void onShowPress(MotionEvent e); 

// 長按,觸摸屏按下後既不擡起也不移動,過一段時間後觸發 

abstract void onLongPress(MotionEvent e); 

// 滾動,觸摸屏按下後移動 

abstract boolean onScroll(MotionEvent e1, MotionEvent e2, floatdistanceX, float distanceY); 

// 滑動,觸摸屏按下後快速移動并擡起,會先觸發滾動手勢,跟着觸發一個滑動手勢 

abstract boolean onFling(MotionEvent e1, MotionEvent e2, floatvelocityX, float velocityY); 

OnDoubleTapListener的接口有這幾個:

// 輕按兩下,手指在觸摸屏上迅速點選第二下時觸發 

abstract boolean onDoubleTap(MotionEvent e); 

// 輕按兩下的按下跟擡起各觸發一次 

abstract boolean onDoubleTapEvent(MotionEvente); 

// 單擊确認,即很快的按下并擡起,但并不連續點選第二下 

abstract boolean onSingleTapConfirmed(MotionEvente); 

有時候我們并不需要處理上面所有手勢,友善起見,Android提供了另外一個類SimpleOnGestureListener實作了如上接口,我們隻需要繼承SimpleOnGestureListener然後重載感興趣的手勢即可。

2.長按後滑動無效

GestureDetector預設是打開LongPress通知的,但是有個問題,長按後,手不離開螢幕且滑動,這個時候發現沒有滑動事件。

而在monolith的HomeScreen中,需要的正是長按之後的滑動,長按不需要。

這個問題的解決辦法是設定手勢識别對象,禁止産生長按事件

當然,沒有禁用長按事件,滑動事件還是有效的,隻是要確定觸屏後馬上滑動,不要等系統産生了長按。