category: Android
DATE : 2011/05/22 (Sun)
DATE : 2011/05/22 (Sun)
android.view.GestureDetectorを使用する場合、生成時に指定するGestureDetector.OnGestureListenerとしてGestureDetector.SimpleOnGestureListenerを使用すると余分なメソッドを実装せずに済むため便利です。しかしダブルタップとシングルタップとを区別しようとして、シングルタップを通知するメソッドの取り違えを起こしやすくもあります。
- SimpleOnGestureListener#onSingleTapUp(MotionEvent)は、ダブルタップであっても、シングルタップ2回分として受け取ってしまいます。
- SimpleOnGestureListener#onSingleTapConfirmed(MotionEvent)は、ダブルタップの場合には呼び出されず、シングルタップの場合のみ呼び出されます。
これは、前者がGestureDetector.OnGestureListenerに定義されているメソッドで、後者がGestureDetector.OnDoubleTapListenerで定義されており、GestureDetector.SimpleOnGestureListenerはその両者を実装しているためです。GestureDetector.OnGestureListenerは、ダブルタップを考慮しません。
そのため、ダブルタップとシングルタップとを区別したい場合は、GestureDetector.SimpleOnGestureListener#onSingleTapUp(MotionEvent)ではなくGestureDetector.SimpleOnGestureListener#onSingleTapConfirmed(MotionEvent)を使用すべきです。
なお、前者はMotionEvent.ACTION_UPの動作を通知し、後者はMotionEvent.ACTION_DOWNの動作を通知することにも注意が必要です。
PR
●この記事にコメントする
忍者ブログ [PR]