Dans iOS, il existe une fonction très simple et puissante pour animer l'ajout et la suppression de lignes UITableView, voici un extrait d'une vidéo youtube montrant l'animation par défaut. Notez comment les lignes environnantes se replient sur la ligne supprimée. Cette animation aide les utilisateurs à suivre ce qui a changé dans une liste et où dans la liste ils regardaient quand les données ont changé.
Depuis que je développe sur Android, je n'ai trouvé aucune facilité équivalente pour animer des lignes individuelles dans une TableView . En appelant notifyDataSetChanged()
mon adaptateur, ListView met immédiatement à jour son contenu avec de nouvelles informations. Je voudrais montrer une animation simple d'une nouvelle ligne poussant ou glissant lorsque les données changent, mais je ne trouve aucun moyen documenté de le faire. Il semble que LayoutAnimationController puisse détenir une clé pour que cela fonctionne, mais lorsque je définis un LayoutAnimationController sur ma ListView (similaire à LayoutAnimation2 d'ApiDemo ) et que je supprime des éléments de mon adaptateur après l'affichage de la liste, les éléments disparaissent immédiatement au lieu d'être animés. .
J'ai également essayé des choses comme les suivantes pour animer un élément individuel lorsqu'il est supprimé:
@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);
}
Cependant, les lignes entourant la ligne animée ne bougent pas jusqu'à ce qu'elles sautent à leur nouvelle position lors de l' notifyDataSetChanged()
appel. Il semble que ListView ne met pas à jour sa disposition une fois ses éléments placés.
Bien que l'écriture de ma propre implémentation / fork de ListView me soit venue à l'esprit, cela semble être quelque chose qui ne devrait pas être si difficile.
Merci!