GestureDetectorCompat.onScroll не вызывается в конкретном случае - PullRequest
0 голосов
/ 28 мая 2018

У меня есть любопытный случай, когда GestureDetectorCompat.onScroll не вызывается.У меня есть SurfaceView для отображения пользовательской карты, которая реализует GestureDetector.OnGestureListener, и в этом классе SurfaceView у меня есть два GestureDetectors, один для обработки жестов в обычном режиме и один для обработки жестов при редактировании карты.У меня есть переменная _activeGestureDetector, которую я назначаю правильному GestureDetector в зависимости от варианта использования.Это прекрасно работает почти во всех случаях, кроме одного.

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

Такое поведение происходит только в первый разЯ пытаюсь прокрутить после нажатия кнопки «Домой», последующие события работают нормально.Это происходит каждый раз, когда я нажимаю кнопку «Домой», чтобы выйти из режима редактирования.Это почти похоже на ошибку, что событие onScroll не вызывается в данном конкретном случае, даже если происходят все правильные события (ACTION_DOWN, за которыми следуют многие события ACTION_MOVE).

Может кто-нибудь объяснить, почему событие onScroll не являетсяназывается в этом конкретном случае?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

У меня было похожее поведение, когда я добавил onDoubleTap(MotionEvent e) переопределение к своему SimpleOnGestureListener, затем после двойного касания прокрутка не была распознана, пока я не сделал что-то вроде жеста броска.Он начал вести себя нормально после того, как я изменил возвращаемое значение onDoubleTap(MotionEvent e) на false.

0 голосов
/ 30 мая 2018

Я до сих пор не понял, почему в этом случае не вызывается событие onScroll, но я сделал обходной путь, который решает проблему в моем случае.

Я создал функцию для имитациисобытие касания, поэтому GestureDetector сначала будет использовать смоделированное событие касания, а затем оно будет работать нормально.

public void simulateTouch() {
    MotionEvent event = MotionEvent.obtain(1, 2, MotionEvent.ACTION_UP, 0, 0, 0);
    onTouchEvent(event);
}

Когда я переключаюсь из режима редактирования в обычный режим с помощью кнопки HomeAsUp, я просто вызываю этоsimulateTouch() функция, после которой GestureDetector, кажется, сбрасывается, и с этого момента он работает нормально.

...