Как реализовать Android 4.0, как проведите пальцем, чтобы отключить функциональность в ListView? - PullRequest
8 голосов
/ 26 февраля 2012

Я работаю над приложением, в котором я хотел бы реализовать функциональность смахивания для отклонения в ListView - аналогично тому, что мы видим в панели уведомлений Android 4.0, списке последних приложений или вкладках браузера. Я хочу запустить приложение на устройствах под управлением Android 2.2+. Смотрите следующее изображение. Я также хочу изменить прозрачность удаляемого элемента - как в ICS.

Веб-браузер Android 4.0 - Смахивание открытых вкладок http://img19.imageshack.us/img19/3605/screenshot2012022617290.png

Я проверил источник веб-браузера ICS на http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.1_r1/com/android/browser/TabScrollView.java?av=f, но не смог выяснить, какой класс особенно ответственен за реализацию этой функциональности.

Кто-нибудь может указать мне правильное направление здесь? Можем ли мы сделать это с помощью библиотеки совместимости Android? Пожалуйста, дайте мне знать. Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

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

  1. Основной необходимый класс - это пользовательский адаптер, который расширяет ListAdapter (ArrayAdapter, SimpleCursorAdapter и т. Д.).
  2. Адаптер применяет View.OnTouchListener ко всем своим представлениям.
  3. Всякий раз, когда этот слушатель обнаруживает горизонтальную прокрутку dx, он вызывает concernedView.offsetLeftAndRight(dx) (что делает представление перетаскиваемым). Конечно, адаптер должен сохранить текущее горизонтальное смещение для вида. Если пользователь перетаскивает вид и удаляет его / ее палец с экрана, touchListener также обнаружит это и запустит анимацию сдвига назад. Используя текущее смещение, мы также можем вычислить альфа-значение, поэтому при приближении к границам экрана изображение будет затухать.
  4. Если одна запись списка в конечном итоге отклоняется пользователем, она становится немного хитрой, и я все еще не уверен, как бы я реализовал следующее действие: содержимое списка необходимо обновить (или адаптер должен игнорировать отклоненные записи) и представления, которые были ниже той, которая была отклонена, должны парить вверх, чтобы заполнить пробел. Я думаю, что это может сработать, чтобы ListView загрузил новый контент, но это мгновенно восполнит пробел. Чтобы избежать этого, я бы затем запустил анимацию, которая позволяет всем заинтересованным видам парить из своей старой позиции (где у нас все еще был разрыв) обратно в их текущую позицию (где разрыв заполнен).

Это лишь некоторые из моих мыслей по этому вопросу, которые могут помочь некоторым людям начать работать над этой проблемой. Как я уже сказал, я, вероятно, собираюсь реализовать это когда-нибудь в будущем и, конечно, я опубликую код здесь.
Буду признателен за любые отзывы в комментариях, но я не хочу подробно объяснять каждый аспект моей идеи, это заняло бы у меня слишком много времени;)

0 голосов
/ 26 июня 2015

Я знаю, что это довольно старый вопрос, но для тех, кто все еще ищет это, вы можете посмотреть библиотеку Романа Нурика здесь: https://github.com/romannurik/Android-SwipeToDismiss

Это показывает, как создать требуемое поведение для списка-вид, а также для нормальных видов.

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