Как удалить элемент из RecyclerView с задержкой

Я бы создал список чатов с animatoin с задержкой (20s). После этого времени каждый элемент должен исчезнуть с угасающей анимацией.

Это не проблема, если я использую RecyclerView без прокрутки. Я переопределяю метод в адаптере, и все работает нормально.

 @Override public void onViewAttachedToWindow(final ViewHolder holder) { if(holder.alpha == null) { holder.alpha = ObjectAnimator.ofFloat(holder.itemView, View.ALPHA, 1f, 0f); holder.alpha.setDuration(300); holder.alpha.setStartDelay(20000); holder.alpha.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { holder.profilePic.setEnabled(false); holder.messageContainer.setEnabled(false); if (items.size() > 0) { items.remove(0); notifyItemRemoved(0); } } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); holder.alpha.start(); } } @Override public void onViewDetachedFromWindow(ViewHolder holder) { if(holder.alpha != null) { holder.alpha.cancel(); holder.alpha = null; } } 

Я показываю 6 сообщений в просмотре recycler.

Проблема заключается в том, что прокрутка включена. (Я не использую метод onViewDetachedFromWindow для разрешенной прокрутки). Если я использую решение (вверху), то я получаю повторно использованную ViewHolder с анимацией. Каждый itemView от ViewHolder holder имеет анимацию. Если получено 7-е мессендж, тогда это сообщение уже имеет анимацию из повторно используемого держателя. Но анимация в onViewAttachedToWindow снова добавляется для одного и того же представления.

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

Тестовый фильм: https://www.dropbox.com/s/1sxdonpasq6lf0o/IMG_0262.MOV?dl=0

Есть идеи?

[Редактировать:]

 // Hnalder to remove item from RecyclerView Handler removeItems = new Handler() { @Override public void handleMessage(Message msg) { if(adapter != null && adapter.getItemCount() > 0) { adapter.removeFirst(); } } }; ... //Fragment::initRecyclerView ... chatView.setLayoutManager(layoutManager); chatView.setAdapter(adapter); chatView.setItemAnimator(new ChatItemAnimator()); //ChatAdapter::removeFirst() public void removeFirst() { items.removeFirst(); notifyItemRemoved(0); } //ChatItemAnimator public class ChatItemAnimator extends BaseItemAnimator { @Override protected void animateRemoveImpl(RecyclerView.ViewHolder holder) { ViewCompat.animate(holder.itemView) .alpha(0) .setDuration(300) .setListener(new DefaultRemoveVpaListener(holder)) .start(); } } 

У меня был довольно похожий случай, поэтому я предлагаю вам сделать следующее:

1- Создайте пользовательский режим для chatListItem с помощью CountdownTimer.

2- Запустите таймер с помощью метода startTimer () в вашем классе customview и уничтожьте элемент по завершении.

3- Используйте эту библиотеку анимации recyler для анимации ваших предметов в ItemRemoved.

Intereting Posts
Android: что мне делать вместо использования устаревшей функции (getwidth ())? Как создать новый плейлист с помощью ContentResolver Имеет ли смысл иметь кнопку «назад» в приложении для Android? Синхронизировать положение прокрутки ScrollView по всем фрагментам внутри ViewPager AppBarLayout.setExpanded (логическая, истинная) странная анимация в библиотеке поддержки 23.1.1 Android: просмотр и просмотр Fade Использование родителей для использования ресурсов Android Lollipop по умолчанию использует данные Mobile Data, когда Wi-Fi не имеет доступа в Интернет? Как создать экран входа в систему Переопределить ресурсы с помощью gradle в зависимости от типа buildType Создание Android-интерфейса, такого как HTC Sense Циркулярная развертка не работает, когда гравитация FAB снизу В чем смысл Rssi в android WifiManager Android-эмулятор не загружается на netbeans Reddit oAuth 2 для Android «беспроигрышное» приложение с дооснащением