Предотвратить смахивание ViewPager2, когда onTouch внутреннего вида - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть ViewPager2 с фрагментом внутри,

во фрагменте, у меня есть пользовательский вид с определенной сенсорной логикой c, которая включает в себя перемещение пальца.

как мне предотвратить ViewPager от перелистывания, пока внутренний вид перехватывает событие касания?

override fun onTouchEvent(event: MotionEvent?): Boolean {
    if (event?.action == MotionEvent.ACTION_DOWN || event?.action == MotionEvent.ACTION_MOVE) {
       //Do some stuff here
    }
    return true
}

при перелистывании этого представления пейджер просмотра все еще перемещается на другие страницы.

1 Ответ

2 голосов
/ 21 февраля 2020

Установить OnTouchListener для внутреннего просмотра. В методе onTouch() вызов:

viewPager.requestDisallowInterceptTouchEvent(true)

ViewPager обрабатывает свое движение смахивания в onInterceptTouchEvent(). Приведенный выше код запрещает ViewPager вызывать onInterceptTouchEvent(). Когда вы проводите пальцем, ViewPager возвращает true в onInterceptTouchEvent(), что также предотвращает передачу сенсорных событий в дочерние представления. Поэтому запрещение перехвата позволяет дочерним представлениям обрабатывать события касания.

Установите значение false, когда к внутреннему виду не прикасаются.

Исходя из моего опыта, onInterceptTouchEvent() предотвращает onTouchEvent(). Это не мешает OnTouchListener. Таким образом, ключом здесь является установка OnTouchListener для внутреннего вида.

...