導入
ViewGroup 全体でダブルタップを検知したいときありますよね?そんな時の解決方法です。
前提条件
- Android アプリ
- ViewGroup 内でダブルタップされたら検知したい
提案手法
対象となるViewGroup に GestureDelector をセットして監視する。
手順
- 検知したい
ViewGroupにclickable,focusableの属性を付与する。 GestureDetectorのインスタンスを作成し、SimpleOnGestureListenerを実装したクラスをインスタンス作成時に渡す。- 上記、インターフェイスを実装したクラスに
onDoubleTapのメソッドをoverrideして任意の処理を追加する。 - ViewGroup の
setOnTouchListenerにおいて引数で渡ってくるMotionEventを 2. にて作成した インスタンスのonTouchEventメソッドに渡して実行する
再現コード
対象となる ViewGroup については container という名前とする。
val detector = GestureDetector(
applicationContext,
object : GestureDetector.SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent?): Boolean {
Toast.makeText(
applicationContext,
"ダブルタップされたよ😂",
Toast.LENGTH_SHORT
).show()
return super.onDoubleTap(e)
}
})
container.setOnTouchListener { _, event ->
detector.onTouchEvent(event)
}