Android: как определить, когда закончился свиток - PullRequest
65 голосов
/ 19 января 2010

Я использую метод onScroll объекта GestureDetector.SimpleOnGestureListener для прокрутки большого растрового изображения на холсте. Когда прокрутка закончилась, я хочу перерисовать растровое изображение на тот случай, если пользователь захочет прокрутить дальше ... от края растрового изображения, но я не вижу, как определить, когда прокрутка закончилась (пользователь поднял палец с экрана).

e2.getAction () всегда возвращает значение 2, так что это не поможет. Кажется, что e2.getPressure возвращает довольно постоянные значения (около 0,25) до последнего вызова OnScroll, когда давление, кажется, падает примерно до 0,13. Полагаю, я мог бы обнаружить это снижение давления, но это будет далеко не надежно.

Должен быть лучший способ: кто-нибудь может помочь, пожалуйста?

Ответы [ 13 ]

0 голосов
/ 06 февраля 2010

Я не пробовал / использовал это, но идея для подхода:

остановить / прервать перерисовку холста на КАЖДОМ событии прокрутки, подождите 1 с, а затем начать перерисовку холста на КАЖДОЙ прокрутке.

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

надеюсь, эта идея поможет вам:)

0 голосов
/ 04 февраля 2010

Я не знаю Android, но, глядя на документацию, Роб кажется прав: Константа ACTION_UP Android Попробуйте проверить ACTION_UP из getAction ()?

Редактировать: Что показывает e1.getAction ()? Возвращает ли он когда-либо ACTION_UP? В документации говорится, что он содержит начальное событие down, поэтому, возможно, он также уведомит, когда указатель будет вверх

Редактировать: Я могу вспомнить только две вещи. Вы возвращаете false в любой момент? Это может помешать ACTION_UP

Единственное, что я бы попробовал, - это создать отдельное событие, может быть, onDown, и установить флаг в OnScroll, например isScrolling. Когда ACTION_UP задается для onDown и isScrolling установлен, вы можете делать все, что хотите, и сбрасывать isScrolling в false. То есть, если onDown вызывается вместе с onScroll, а getAction будет возвращать ACTION_UP во время onDown

0 голосов
/ 27 января 2010

Я сам этого не делал, но, глядя на onTouch (), вы всегда получаете последовательность 0 <2> 1, поэтому в конце должен быть 1 для подъема пальца.

...