Sobes.tech
Middle

Jak zaimplementować animacje w RecyclerView?

sobes.tech AI

Odpowiedź od AI

RecyclerView używa ItemAnimator do animacji zmian w zestawie danych. Domyślnie używany jest DefaultItemAnimator.

Gdy dochodzi do zmian (dodanie, usunięcie, przesunięcie elementów), RecyclerView powiadamia ItemAnimator. Animator analizuje te zmiany i uruchamia odpowiednie animacje.

Główne metody ItemAnimator do obsługi zmian to:

  • animateAdd(): Animacja dodania nowego elementu.
  • animateRemove(): Animacja usunięcia elementu.
  • animateMove(): Animacja przesunięcia elementu.
  • animateChange(): Animacja zmiany zawartości elementu (np. podczas aktualizacji danych).

Animacje niestandardowe tworzy się przez dziedziczenie z ItemAnimator lub DefaultItemAnimator i nadpisanie tych metod. Wewnątrz metod można używać różnych klas animacji, takich jak ValueAnimator czy ObjectAnimator.

Przykład prostej niestandardowej animacji dodawania:

class CustomItemAnimator : DefaultItemAnimator() {

    override fun animateAdd(holder: RecyclerView.ViewHolder): Boolean {
        holder.itemView.alpha = 0f // Stan początkowy: całkowicie przezroczysty
        holder.itemView.animate()
            .alpha(1f) // Stan końcowy: w pełni widoczny
            .setDuration(addDuration) // Czas trwania animacji
            .setListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator?) {
                    dispatchAddFinished(holder) // Powiadomienie RecyclerView o zakończeniu
                }
                override fun onAnimationCancel(animation: Animator?) {
                    dispatchAddFinished(holder)
                }
            })
            .start()
        return true // Zwraca true, aby wskazać, że animacja została uruchomiona
    }
}

Aby zastosować niestandardowy animator, należy go ustawić w RecyclerView:

recyclerView.itemAnimator = CustomItemAnimator()