У меня есть любопытный случай, когда GestureDetectorCompat.onScroll не вызывается. У меня есть SurfaceView для отображения настраиваемой карты, которая реализует GestureDetector.OnGestureListener, и в этом классе SurfaceView у меня есть два GestureDetector, один для обработки жестов в обычном режиме, а другой для обработки жестов при редактировании карты. У меня есть переменная _activeGestureDetector, которую я назначаю правильному GestureDetector в зависимости от варианта использования. Это отлично работает почти во всех случаях, кроме одного.
Обычно я переключаюсь в режим редактирования GestureDetector, когда дважды касаюсь элемента на карте, и переключаюсь обратно в обычный режим GestureDetector, когда я дважды касаюсь вне любых элементов на карте. Это работает, как ожидалось. Теперь я добавил функцию, которая переходит из режима редактирования в нормальный режим при нажатии кнопки HomeAsUp на панели инструментов. Я вижу, что детектор жестов переключается в нормальный режим GestureDetector при нажатии на кнопку «Домой», и я получаю события onTouch и событие onDown, но onScroll не вызывается, хотя я вижу в моем журнале, что onTouch получает одно событие ACTION_DOWN и множество событий ACTION_MOVE. Если я удерживаю палец и перемещаю его достаточно долго, запускается событие onLongPress (но этого не должно быть, поскольку я все время двигаю пальцем).
Такое поведение происходит только при первой попытке прокрутки после нажатия кнопки «Домой», последующие события работают нормально. Это происходит каждый раз, когда я нажимаю кнопку «Домой» для выхода из режима редактирования. То, что событие onScroll не вызывается в этом конкретном случае, почти похоже на ошибку, хотя все правильные события имеют место (ACTION_DOWN, за которым следуют многие события ACTION_MOVE).
Может ли кто-нибудь объяснить, почему событие onScroll не вызывается в этом конкретном случае?