Desenvolvi um aplicativo Android simples onde você pode inserir novos itens em uma lista pressionando um botão. Novos itens aparecem instantaneamente, parece desleixado. Tentei animar a inserção deles, mas não está funcionando.
O método como tentei fazer isso foi atribuir a cada item da lista um booleano que determina se o item está visível. Ao pressionar um botão, o booleano é definido como verdadeiro.
Aqui está o código:
Esta é a classe de dados para cada item da lista. Ele contém um parâmetro booleano e de string.
data class Item(
var isVisible: Boolean = false,
val text: String
)
Aqui está a IU. Consiste em uma lista, um botão, uma coluna preguiçosa. O botão adiciona um novo item à lista e define o parâmetro isVisible como verdadeiro. A lista é exibida na coluna lenta.
Button(
onClick = {
items.add(
Item(isVisible = true, text = "Item ${items.size + 1}")
)
}
) {
Text("Add item")
}
LazyColumn {
items(items) { item ->
AnimatedVisibility(visible = item.isVisible) {
Text(text = item.text)
}
}
}
Não está funcionando. Os itens da lista ainda aparecem instantaneamente.
O Jetpack Compose introduziu o
animateItem
Modificador, que irá animar a inserção, exclusão e reordenação de itens.Você pode usá-lo da seguinte maneira:
Observe que você precisa especificar o
key
parâmetro daitems
função para atribuir um identificador exclusivo de cada umaItem
para animações corretas. No código acima, estamos apenas considerando toda a classe de dados como chave. Você precisaria ter certeza de que cada classe de dados tivesse umtext
valor exclusivo.Você precisará de pelo menos o Jetpack Compose
1.7.0-beta06
para usaranimateItem
ou especificar a versão da dependência básica da seguinte maneira: