Как реализовать Android 4.0, как салфетки, чтобы уволить функциональность в ListView?
Я работаю над приложением, в котором я хотел бы реализовать функцию swipe-to-dismiss в ListView - аналогично тому, что мы видим в панели уведомлений Android 4.0, списке последних приложений или вкладках браузера. Я хочу запустить приложение на устройствах под управлением Android 2.2+. См. следующее изображение. Я также хочу изменить прозрачность элемента, который будет удален-так же, как в ICS.
Я проверил источник веб-браузера 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 ответа:
Я знаю, что это довольно старый вопрос, но для тех, кто все еще ищет его, вы можете посмотреть библиотеку Романа Нурика здесь: https://github.com/romannurik/Android-SwipeToDismiss
Здесь показано, как создать требуемое поведение для представления списка, а также для обычных представлений.
Я также думал о реализации такой функции, но я еще не сделал этого. Поэтому единственное, что я могу предложить, - это некоторые идеи о том, как я ... подошел бы к этой проблеме. Если я в конце концов написал какой-то код, я опубликую его здесь.
Это лишь некоторые из моих мыслей по этому вопросу, которые могут помочь некоторым людям начать работать над этой проблемой. Как я уже сказал, Я, вероятно, собираюсь реализовать это когда-нибудь в будущем, и, конечно, я опубликую код здесь.
- основным классом, который требуется, является пользовательский адаптер, который расширяет
ListAdapter
(ArrayAdapter, SimpleCursorAdapter и т. д.).- адаптер применяет вид.OnTouchListener всем своим видом.
- всякий раз, когда этот слушатель обнаруживает горизонтальная прокрутка
dx
, она вызываетconcernedView.offsetLeftAndRight(dx)
(что сделает вид перетаскиваемым). Конечно, адаптер должен сохранять текущее горизонтальное смещение для вида. Если пользователь перетаскивал вид и убирал палец с экрана, touchListener также обнаружит это и запустит анимацию обратного слайда. Используя текущее смещение, мы также можем вычислить Альфа-значение, так что вид исчезнет, когда он приблизится к границам экрана.- если одна запись списка в конечном итоге отклоняется пользователь, это становится немного сложно, и я до сих пор не уверен, как бы я реализовал следующее действие: содержимое списка должно быть обновлено (или адаптер должен игнорировать отклоненные записи), а представления, которые были ниже того, который был отклонен, должны зависать вверх, чтобы заполнить пробел. Я думаю, что это может сработать, чтобы позволить ListView загружать новое содержимое, но это мгновенно заполнит пробел. Чтобы избежать этого, я бы тогда запустил анимацию, которая позволяет всем заинтересованным видам зависать от их старая позиция (где у нас все еще был пробел) возвращается в свою текущую позицию (где пробел заполнен).
Я был бы признателен за любую обратную связь в комментариях, но я не хочу подробно объяснять каждый аспект моей идеи, это займет меня слишком много времени. много времени ;)