Как реализовать Android 4.0, как салфетки, чтобы уволить функциональность в ListView?


Я работаю над приложением, в котором я хотел бы реализовать функцию swipe-to-dismiss в 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 8

2 ответа:

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

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

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

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