Как я могу анимировать элементы RecyclerView, когда они появляются?
Аниматор элемента по умолчанию анимируется только тогда, когда данные добавляются или удаляются после того, как были установлены данные переработчика. Я разрабатываю новые приложения и понятия не имею, с чего начать.
Есть идеи как этого добиться?
android
android-layout
android-recyclerview
PaulNunezM
источник
источник
recyclerView.scheduleLayoutAnimation()
после изменения набора данных, в противном случае анимация не будет работать.РЕДАКТИРОВАТЬ :
Согласно документации ItemAnimator :
Поэтому, если вы не добавите свои элементы один за другим
RecyclerView
и не обновите представление на каждой итерации, я не думаю, чтоItemAnimator
это решение для ваших нужд.Вот как вы можете анимировать
RecyclerView
элементы, когда они появляются с помощью CustomAdapter:И ваш custom_item_layout будет выглядеть так:
Для получения дополнительной информации о CustomAdapters и
RecyclerView
обратитесь к этому обучению в официальной документации .Проблемы с быстрой прокруткой
Использование этого метода может вызвать проблемы с быстрой прокруткой. Представление может быть повторно использовано во время анимации. Во избежание этого рекомендуется очищать анимацию, когда она отсоединена.
На CustomViewHolder:
Старый ответ:
Посмотрите репо Габриэле Мариотти , я уверен, вы найдете то, что вам нужно. Он предоставляет простые ItemAnimators для RecyclerView, такие как SlideInItemAnimator или SlideScaleItemAnimator.
источник
onViewDetachedFromWindow
и вызватьclearAnimation
вид. Проблема заключается в том, что анимации выполняются, когда RecyclerView пытается повторно использовать представление.Я анимировал появление
Recyclerview
элементов, когда они впервые появляются, как показано в коде ниже. Возможно, это кому-нибудь пригодится.Вы также можете заменить
setFadeAnimation()
на следующее,setScaleAnimation()
чтобы оживить внешний вид элементов, масштабируя их из точки:Приведенный выше код имеет некоторые бородавки, поскольку при прокрутке
RecyclerView
элементы всегда исчезают или масштабируются. Если вы хотите, вы можете добавить код, чтобы позволить анимации происходить приRecyclerView
первом создании фрагмента или действия, содержащего объект (например, получить системное время при создании и разрешить анимацию только для первых миллисекунд FADE_DURATION).источник
Я создал анимацию из ответа pbm с небольшим,
modification
чтобы запустить анимацию только один раздругими словами
Animation appear with you scroll down only
и в
onBindViewHolder
вызове функцииисточник
lastPosition
представляет количество визуализированных представлений, поэтому оно начинает свое значение-1
, каждый раз, когда создается новое представление, мы запускаем анимацию и увеличиваем позициюВы можете добавить
android:layoutAnimation="@anim/rv_item_animation"
атрибут,RecyclerView
похожий на этот:спасибо за отличную статью здесь: https://proandroiddev.com/enter-animation-using-recyclerview-and-layoutanimation-part-1-list-75a874a5d213
источник
Хорошее место для начала это: https://github.com/wasabeef/recyclerview-animators/blob/master/animators/src/main/java/jp/wasabeef/recyclerview/adapters/AnimationAdapter.java
Вам даже не нужна полная библиотека, этого класса достаточно. Тогда, если вы просто реализуете свой класс Adapter, предоставляя аниматор, подобный этому:
вы увидите элементы, появляющиеся снизу при прокрутке, что также поможет избежать проблемы с быстрой прокруткой.
источник
Анимация элементов в обзоре переработчика, когда они связаны в адаптере, может быть не самой лучшей идеей, поскольку это может привести к тому, что элементы в обзоре переработчика будут анимироваться с разными скоростями. В моем случае, элемент в конце обзора переработчика оживляет свою позицию быстрее, чем те, что наверху, так как те, что наверху, должны перемещаться дальше, поэтому он выглядит неопрятно.
Оригинальный код, который я использовал для анимации каждого элемента в представлении реселлера, можно найти здесь:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Но я скопирую и вставлю код в случае разрыва ссылки.
ШАГ 1. Установите это внутри метода onCreate, чтобы обеспечить запуск анимации только один раз:
ШАГ 2: Вам нужно будет поместить этот код в метод, с которого вы хотите запустить анимацию:
В ссылке писатель анимирует значки панели инструментов, поэтому он поместил его в этот метод:
ШАГ 3: Теперь напишите логику для startIntroAnimation ():
Моя предпочтительная альтернатива:
Я бы предпочел оживить весь обзор переработчика, а не элементы внутри обзора переработчика.
ШАГ 1 и 2 остаются прежними.
В ШАГЕ 3, как только ваш вызов API вернется с вашими данными, я запустил анимацию.
Это оживило бы все ваше представление о переработчике так, чтобы оно отображалось в нижней части экрана.
источник
latestPostRecyclerview
?Создать этот метод в ваш recyclerview адаптер
И, наконец, добавить эту строку кода в onBindViewHolder
setZoomInAnimation(holder.itemView);
источник
В 2019 году я бы предложил поместить все анимации предметов в ItemAnimator.
Давайте начнем с объявления аниматора в режиме просмотра:
Объявите пользовательский аниматор,
Как и выше, есть один для исчезновения
animateDisappearance
, для добавленияanimateAdd
, для измененияanimateChange
и перемещенияanimateMove
.Одним из важных моментов было бы вызвать правильных диспетчеров анимации внутри них.
источник
Просто расширяет ваш адаптер, как показано ниже
И добавить супер метод к onBindViewHolder
Это автоматизированный способ создания анимированного адаптера, такого как "Basheer AL-MOMANI"
источник
Я думаю, лучше использовать это так: (в адаптере RecyclerView переопределить только один метод)
Если вы хотите, чтобы каждый прикрепить анимацию там в RV.
источник