Прокручиваемый MapView внутри RecyclerView: dispatchTouchEvent vs onTouchEvent

Я пытаюсь иметь прокручиваемый MapView внутри RecyclerView, поэтому я устанавливаю requestDisallowInterceptTouchEvent() до и после TouchEvent.

Странная вещь: это работает, если я установлю это в dispatchTouchEvent() метод, но он не работает, если я делаю то же самое в onTouchEvent() метод.

Может кто-нибудь объяснить, почему я не могу установить это в onTouchEvent()?

За работой:

public class WorkingScrollableListItemMapView extends MapView {

    // constructors

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // Stop parents from handling the touch
                this.getParent().requestDisallowInterceptTouchEvent(true);
            break;
            case MotionEvent.ACTION_UP:
                // Allow parents from handling the touch
                this.getParent().requestDisallowInterceptTouchEvent(false);
                break;
        }
        return super.dispatchTouchEvent(ev);
    }
}

Не работает:

public class NotWorkingScrollableListItemMapView extends MapView {

    // constructors

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_UP:
                // Allow parents from handling the touch
                this.getParent().requestDisallowInterceptTouchEvent(false);
                break;
            case MotionEvent.ACTION_DOWN:
                // Stop parents from handling the touch
                this.getParent().requestDisallowInterceptTouchEvent(true);
                break;
        }
        return super.onTouchEvent(ev);
    }
}

1 ответ

Последовательность вызовов для обработки события несколько в следующем порядке: onInterceptTouchEvent, onDispatchTouchEvent, dispatchTouchEvent, onTouchEvent. Для меня это означает, что onTouchEvent - самый последний шаг в обработке события. Было бы слишком поздно манипулировать, где и кем обрабатывается событие на самом последнем этапе. Что говорит исходный код, если вы посмотрите на более ранние методы обработки события?

Другие вопросы по тегам