In iOS, esiste una funzione molto semplice e potente per animare l'aggiunta e la rimozione di righe UITableView, ecco una clip da un video di YouTube che mostra l'animazione predefinita. Nota come le righe circostanti collassano sulla riga eliminata. Questa animazione aiuta gli utenti a tenere traccia di ciò che è cambiato in un elenco e dove nell'elenco stavano guardando quando i dati sono cambiati.
Da quando ho sviluppato su Android non ho trovato strutture equivalenti per animare singole righe in un TableView . La chiamata notifyDataSetChanged()
al mio adattatore fa sì che ListView aggiorni immediatamente il suo contenuto con nuove informazioni. Vorrei mostrare una semplice animazione di una nuova riga che spinge verso l'interno o scivola quando i dati cambiano, ma non riesco a trovare alcun modo documentato per farlo. Sembra che LayoutAnimationController potrebbe contenere una chiave per farlo funzionare, ma quando imposto un LayoutAnimationController sul mio ListView (simile a LayoutAnimation2 di ApiDemo ) e rimuovo gli elementi dal mio adattatore dopo che l'elenco è stato visualizzato, gli elementi scompaiono immediatamente invece di animarsi .
Ho anche provato cose come le seguenti per animare un singolo elemento quando viene rimosso:
@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);
}
Tuttavia, le righe che circondano la riga animata non si spostano fino a quando non saltano alle loro nuove posizioni quando notifyDataSetChanged()
viene chiamato. Sembra che ListView non aggiorni il suo layout una volta posizionati i suoi elementi.
Mentre scrivevo la mia implementazione / fork di ListView mi è passato per la testa, questo sembra qualcosa che non dovrebbe essere così difficile.
Grazie!