мигает в пользовательской реализации перетаскивания - PullRequest
0 голосов
/ 29 февраля 2012

Я реализовал пользовательский вид с некоторыми детьми. Вид можно прокручивать, используя стандартный жест перетаскивания. Также каждый ребенок может быть нажата. Проблема в том, что когда я начинаю перетаскивать вид, один из дочерних элементов получает событие «вниз» и на секунду меняет свое состояние на «нажатое». Я бы предпочел стандартное поведение просмотра списка - ребенок переходит в нажатое состояние, когда пользователь продолжает нажимать на этого ребенка пальцем в течение примерно 50 мс. Это уменьшит мигание, вызванное неправильным прочтением события нажатия.

Я знаю, что мне нужно как минимум 2 события, чтобы определить, касается ли пользователь касания или перетаскивания вида. На данный момент я использую TimerTask для планирования события «вниз». Когда я получаю событие «move» до того, как будет выполнено мое событие «down», я знаю, что пользователь перетаскивает, и я могу отменить запланированное событие.

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

У меня вопрос - как это реализовано в Android ViewView? Я пытался скопировать их решение из реализации listview, но оно настолько огромно, что я не могу с этим справиться. Просто я не вижу кода, ответственного за обработку такой ситуации.

1 Ответ

0 голосов
/ 28 ноября 2012

Мне удалось понять логику обнаружения жестов в ListView и вообще в представлениях Android. Я написал свой собственный детектор жестов, который несколько лучше оригинального. Он сообщает о большем количестве жестов (несколько нажатий, перетаскивание) и имеет некоторые настраиваемые параметры (тайм-ауты, перемещение эпсилон). Вы можете найти его с открытым исходным кодом здесь: Лучший детектор жестов на code.google

Библиотека использует комбинацию класса Handler и метода postDelayed () / removeCallbacks () для обнаружения, обработки и отмены событий движения и жестов. Это довольно просто, и можно понять идею, просто прочитав код.

Этот репозиторий также содержит простую демонстрацию. Обратите внимание, что этот код предоставляется «как есть», содержит некоторые бесполезные комментарии, журналы и должен быть немного очищен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...