Sobes.tech
Middle

Jak se v RecyclerView implementují animace?

sobes.tech AI

Odpověď od AI

RecyclerView používá ItemAnimator k animaci změn v datové sadě. Ve výchozím nastavení je použit DefaultItemAnimator.

Když dojde ke změnám (přidání, odstranění, přesunutí prvků), RecyclerView oznámí ItemAnimator. Ten analyzuje tyto změny a spustí odpovídající animace.

Hlavní metody ItemAnimator pro zpracování změn jsou:

  • animateAdd(): Animace přidání nového prvku.
  • animateRemove(): Animace odstranění prvku.
  • animateMove(): Animace přesunu prvku.
  • animateChange(): Animace změny obsahu prvku (například při aktualizaci dat).

Vlastní animace jsou vytvářeny děděním z ItemAnimator nebo DefaultItemAnimator a přepsáním těchto metod. Uvnitř metod lze použít různé třídy animací, například ValueAnimator nebo ObjectAnimator.

Příklad jednoduché vlastní animace přidání:

class CustomItemAnimator : DefaultItemAnimator() {

    override fun animateAdd(holder: RecyclerView.ViewHolder): Boolean {
        holder.itemView.alpha = 0f // Počáteční stav: úplně průhledný
        holder.itemView.animate()
            .alpha(1f) // Konečný stav: úplně viditelný
            .setDuration(addDuration) // Délka animace
            .setListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator?) {
                    dispatchAddFinished(holder) // Oznámení RecyclerView o ukončení
                }
                override fun onAnimationCancel(animation: Animator?) {
                    dispatchAddFinished(holder)
                }
            })
            .start()
        return true // Vrací true, pokud byla animace spuštěna
    }
}

Pro použití vlastního animatoru je třeba jej nastavit v RecyclerView:

recyclerView.itemAnimator = CustomItemAnimator()