No iOS, existe um recurso muito fácil e poderoso para animar a adição e remoção de linhas do UITableView. Aqui está um clipe de um vídeo do youtube mostrando a animação padrão. Observe como as linhas circundantes são recolhidas na linha excluída. Essa animação ajuda os usuários a acompanhar o que mudou em uma lista e onde eles estavam olhando quando os dados foram alterados.
Desde que desenvolvi no Android, não encontrei um recurso equivalente para animar linhas individuais em um TableView . A ligação notifyDataSetChanged()
ao meu adaptador faz com que o ListView atualize imediatamente seu conteúdo com novas informações. Gostaria de mostrar uma animação simples de uma nova linha entrando ou saindo quando os dados mudam, mas não consigo encontrar nenhuma maneira documentada de fazer isso. Parece que o LayoutAnimationController pode ter uma chave para fazer com que isso funcione, mas quando defino um LayoutAnimationController no meu ListView (semelhante ao LayoutAnimation2 do ApiDemo ) e removo elementos do meu adaptador depois que a lista é exibida, os elementos desaparecem imediatamente em vez de serem animados .
Também tentei coisas como as seguintes para animar um item individual quando ele é removido:
@Override
protected void onListItemClick(ListView l, View v, final int position, long id) {
Animation animation = new ScaleAnimation(1, 1, 1, 0);
animation.setDuration(100);
getListView().getChildAt(position).startAnimation(animation);
l.postDelayed(new Runnable() {
public void run() {
mStringList.remove(position);
mAdapter.notifyDataSetChanged();
}
}, 100);
}
No entanto, as linhas que cercam a linha animada não se movem até que pulem para suas novas posições quando notifyDataSetChanged()
são chamadas. Parece que o ListView não atualiza seu layout depois que seus elementos foram colocados.
Enquanto escrevia minha própria implementação / fork do ListView me passou pela cabeça, isso parece algo que não deve ser tão difícil.
Obrigado!