@neRazrabitchik

Как вернуть onClickListener для дочерних элементов при использовании onTouchEvent?

Привет всем, может кто-нибудь помочь в кастомным скроллвью, мне нужно было отследить когда человек делает свайп вправо/влево находясь в конце списка чтобы отобразить ui элемент (что-то типо swipe to refresh layout только горизонтальый и работает в обе стороны) Использовал GestureDetector, свайпы отслеживаются и все хорошо, но скролл перестал слушать события на клик от дочерних элементов и я не могу понять как ему это вернуть

В скроле храню ячейки таблицы, на каждой есть свой обработчик клика

override fun onTouchEvent(ev: MotionEvent): Boolean {
        when (ev.action){
            MotionEvent.ACTION_DOWN -> {
                performClick()
                x1 = ev.x
                y1 = ev.y
            }
            MotionEvent.ACTION_UP -> {
                val diffX = x1.minus(ev.x)
                val diffY = y1.minus(ev.y)
                if (abs(diffX) > abs(diffY)){
                    if (abs(diffX) > MIN_DISTANCE && FINAL_SCROLL_POS){
                        if (diffX < 0){
                            Log.e("SCROLL direction", "RIGHT")
                            scrollViewListener!!.onRightScroll()
                        }else {
                            Log.e("SCROLL direction", "LEFT")
                            scrollViewListener!!.onLeftScroll()
                        }
                        vibrate()
                    }
                }
            }
        }
        return super.onTouchEvent(ev)
    }


Клик перестает работать после переопределения метода onInterceptTouchEvent, если же его не переопределять то значение x1 (позиция первого нажатия на экран) всегда будет равна 0.0
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
        return if (gestureDetector!!.onTouchEvent(ev)) true else super.onInterceptTouchEvent(ev)
    }
  • Вопрос задан
  • 36 просмотров
Решения вопроса 1
@neRazrabitchik Автор вопроса
В общем починил, если вдруг кто-то столкнется с такой же проблемой:
Удаляем метод dispatchTouchEvent далее просто переопределяем onSingleTapConfirmed и возвращаем в нем false
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы