導入
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) }