ScaleGestureDetector не определяет конец жеста - PullRequest
3 голосов
/ 01 ноября 2010

Я подключил ScaleGestureDetector к OnTouchListener, как указано в документации Android.По какой-то причине ScaleGestureDetector не всегда определяет конец жеста повышения.Это происходит в основном при быстром зажимании от большого к маленькому.

Эффект состоит в том, что после того, как я отпустил оба пальца, детектор не запускает событие завершения жеста.Если после этого я коснусь экрана одним из них, он все еще думает, что я продолжаю жест масштаба (продолжает запускать события Scale).Мне нужно сделать еще один жест, чтобы заставить детектор запустить событие завершения.

Я добавил журналы в OnTouchListener, и когда жест масштабирования застрял, я по-прежнему получаю события движения нормально, когда используется один палец и event.getPointerCount () 1. 1. 1005 *

Я убедился, что другие слушатели не вмешиваются.Представление с onTouchListener - не единственное представление на экране, но этот эффект также возникает, когда я очень осторожно начинаю и заканчиваю жест в этом единственном представлении.

Есть ли способ улучшить обнаружение конца?

Или, если есть способ вручную настроить ScaleGestureDetector для запуска onScaleEnd и изменить scaleGestureDetector.isInProgress() на false?

Ответы [ 2 ]

4 голосов
/ 14 августа 2011

Я пришел к решению, после применения вышеуказанного исправления. Мое приложение использует и ScaleGestureDetector, и обычный GestureDetector, поэтому я реализовал свой метод onScroll (из GestureDetector):

if (m_dualFingerGestureDetector.isInProgress() && (evt1.getPointerCount() == 2 || evt2.getPointerCount == 2)
{
    return false;
}
...

Мои переменные следующие:

m_dualFingerGestureDetector мой ScaleGestureDetector
evt1 и evt2 являются MotionEvent с для жеста перетаскивания. Если у вас есть только одно событие, вы можете сократить указанный выше код:

if (m_dualFingerGestureDetector.isInProgress() && evt.getPointerCount() == 2)
{
    return false;
}
...

Это позволяет создавать очень приятных пользовательских интерфейсов. Я всегда рекомендовал бы использовать комбинацию детекторов жестов для добавления функций панорамирования и масштабирования в ваше приложение.

1 голос
/ 04 ноября 2010

Вы можете столкнуться со следующей ошибкой http://code.google.com/p/android/issues/detail?id=10067

Мне пришлось скопировать реализацию ScaleGestureDetector в мой локальный проект, чтобы я мог применить исправление. Я также нацеливаюсь на устройства 2.1, поэтому этот класс для меня недоступен, если я не скопирую его в свой проект.

https://android.googlesource.com/platform/frameworks/base/+/gingerbread-release/core/java/android/view/ScaleGestureDetector.java

...