Sobes.tech
Junior — Middle

Como implementar efeitos de animação ao atualizar elementos numa lista RecyclerView?

sobes.tech IA

Resposta da IA

Para implementar efeitos de animação ao atualizar elementos na lista RecyclerView, pode usar a classe incorporada DefaultItemAnimator ou criar a sua própria classe que herde de RecyclerView.ItemAnimator.

Principais métodos:

  1. Usar DefaultItemAnimator — por padrão, o RecyclerView já suporta animações de adição, remoção e alteração de elementos.

  2. Sobrescrever métodos do adaptador com DiffUtil — ao atualizar a lista com DiffUtil.Callback, pode calcular eficientemente as mudanças e o RecyclerView animará suavemente as atualizações.

  3. ItemAnimator personalizado — se precisar de animações únicas, pode criar a sua própria classe que implemente a lógica de animação.

Exemplo de uso do DiffUtil para uma atualização suave:

class MyAdapter : RecyclerView.Adapter<MyViewHolder>() {
    private var items = listOf<MyItem>()

    fun updateList(newItems: List<MyItem>) {
        val diffCallback = object : DiffUtil.Callback() {
            override fun getOldListSize() = items.size
            override fun getNewListSize() = newItems.size
            override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int) =
                items[oldItemPosition].id == newItems[newItemPosition].id
            override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) =
                items[oldItemPosition] == newItems[newItemPosition]
        }
        val diffResult = DiffUtil.calculateDiff(diffCallback)
        items = newItems
        diffResult.dispatchUpdatesTo(this)
    }
}

Assim, o RecyclerView anima suavemente as mudanças sem necessidade de escrever animações manualmente.