1、GestureDetector
OnGestureListener接口的6個方法:
單擊:onDown(MotionEvent e)
抬起:onSingleTapUp(MotionEvent e)
短按:onShowPress(MotionEvent e)
長按:onLongPress(MotionEvent e)
滾動:onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float disanceY)
滑動:onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
(注解:velocity:速率,速度)
OnDoubleTapListener接口的3個方法:
雙擊:onDoubleTap(MotionEvent e)
雙擊按下和抬起各觸發(fā)一次:onDoubleTapEvent(MotionEvent e)
單擊確認(rèn):onSingleTapConfirmed(MotionEvent e)就是很快地按下并抬起,但不連續(xù)點(diǎn)擊第二下。
如果分別去實(shí)現(xiàn)這兩個接口的所有方法,未免太麻煩了,所以這里提供了另一個接口:SimpleOnGestureListener,它已經(jīng)繼承了前面所講的兩個監(jiān)聽器。
- 繼承SimpleOnGestureListener
- 重載感興趣的手勢
2、GestureOverlayView
給gestureOverlayView設(shè)置監(jiān)聽器:
gestureOverlayView.addOnGesturePerformedListener(new OnGesturePerformedListener(){})
重寫方法onGesturePerformed()。
如圖,onGesturePerformed()的示例代碼,也就是關(guān)于手勢識別的代碼實(shí)現(xiàn)。
ArrayList<Prediction>:預(yù)測集
predction.score:相似度,值越大,則越相似,也就是說你必須做出幾乎一模一樣的手勢才能通過識別。相似度的取值范圍一般是0.0~10.0,取10.0就已經(jīng)太夸張了,因?yàn)楹茈y做出非常接近的手勢。所以,這里的下限只取5.0:
predction.score>=5.0
如果覺得顯示的手勢的軌跡不好看,可以自定義軌跡的樣式。
一些常見的XML屬性設(shè)置:
Android:eventInterceptionEnabled 定義當(dāng)手勢已經(jīng)被識別出來時,是否攔截該手勢動作
Android:fadeDuration 當(dāng)用戶畫完的時候,手勢效果淡出的時間
Android:fadeEnabled 用戶畫完之后,手勢是否自動淡出
Android:gestureColor 手勢的顏色
Android:gestureStrokeType 筆畫的類型
Android:gestureStrokeWidth 筆畫的粗細(xì)