🫥

GestureDetectorCompatでonScrollが発火しない

2023/06/09に公開

こんな感じのコードを書いたのだけど、発火しなくてハマった

val detector = GestureDetectorCompat(
    requireActivity(),
    object : GestureDetector.SimpleOnGestureListener() {
        override fun onScroll(e1: MotionEvent, e2: MotionEvent, distanceX: Float, distanceY: Float): Boolean {
            // 発火しない
            return true
        }
    },
)


view.setOnTouchListener { _, event ->
    return@setOnTouchListener detector.onTouchEvent(event)
}

chatgptさんの回答

tmp

だめだった...

試行錯誤した結果 onDownをoverrideして、trueを返さないとonScrollに到達しないみたい.
下記のようにして解決

val detector = GestureDetectorCompat(
    requireActivity(),
    object : GestureDetector.SimpleOnGestureListener() {
        override fun onDown(e: MotionEvent): Boolean {
            // onScrollを発火させるために必須
            return true
        }

        override fun onScroll(e1: MotionEvent, e2: MotionEvent, distanceX: Float, distanceY: Float): Boolean {
            // 発火する
            return true
        }
    },
)


view.setOnTouchListener { _, event ->
    return@setOnTouchListener detector.onTouchEvent(event)
}

この回答を書くことでいずれChatGPTさんにも学習されることを望む

Discussion