Comment Animer l'Ajout ou la Suppression d'Android ListView Lignes
Dans iOS, il est très facile et puissant de la facilité à animer l'ajout et la suppression de la UITableView lignes, voici un clip d'une vidéo youtube montrant l'animation par défaut. Notez comment les environs lignes effondrement sur la ligne supprimée. Cette animation permet aux utilisateurs de garder une trace de ce qui a changé dans une liste, et la liste qu'ils étaient à la recherche à un moment où les données ont changé.
Depuis que j'ai été en développement sur Android, j'ai trouvé aucun équivalent facilité à animer des lignes individuelles dans un TableView. L'appel de notifyDataSetChanged()
sur mon Adaptateur causes de la liste à immédiatement mettre à jour son contenu avec de nouvelles informations. J'aimerais vous montrer une simple animation d'une nouvelle ligne, poussant dans coulissantes ou lorsque les données changent, mais je ne trouve pas toutes documentées façon de le faire. Il ressemble à LayoutAnimationController peut détenir une clé pour obtenir que cela fonctionne, mais quand j'ai mis un LayoutAnimationController sur mon ListView (similaire à ApiDemo de LayoutAnimation2) et de supprimer des éléments de ma carte après que la liste est affichée, les éléments disparaissent immédiatement au lieu d'obtenir animés en.
J'ai aussi essayé des choses comme les suivantes pour animer un élément lorsqu'il est retiré:
@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 l'animation de ligne ne pas déplacer la position jusqu'à ce qu'ils sautent de leur nouveau poste quand notifyDataSetChanged()
est appelé. Il semble ListView n'a pas de mise à jour de sa mise en page une fois que ses éléments ont été placés.
Lors de l'écriture de ma propre mise en œuvre/fourche de ListView a traversé mon esprit, cela semble être quelque chose qui ne devrait pas être si difficile.
Merci!
- quelqu'un a trouver la réponse à cette question? pls shareee
- avez-vous fait de l'animation comme celle de la vidéo de youtube (comme l'iphone), Si vous avez une démo ou un lien pour android alors s'il vous plaît donnez-moi, j'ai essayé d'utiliser animateLayoutChanges dans le fichier xml, mais ce n'est pas exactement comme l'iphone
- malheureusement je n'ai plus de travail sur le développement Android. Je n'ai pas testé les réponses à cette question qui ont été écrits après la autour 2012.
Vous devez vous connecter pour publier un commentaire.
de haut en bas de l'animation d'utilisation :
anim.setAnimationListener(new AnimationListener() { ... })
au lieu d'utiliser un GestionnairepopulateList()
pour?Handler
. Deuxièmement, elle rend le code moins complexe en utilisant déjà intégré dans la fonction de rappel pour une fois que l'animation se termine. Troisièmement, vous ne savez pas comment la mise en œuvre deHandler
etAnimation
fonctionne sur chaque plate-forme; il peut être possible que votre retard exécutable qui se passe avant que l'animation se termine.La
RecyclerView
prend soin d'ajouter, de supprimer et de re-commander des animations!Ce simple AndroidStudio projet dispose d'un
RecyclerView
. jetez un oeil à la s'engage:Prendre un coup d'oeil à la solution Google. Voici une méthode de suppression seulement.
ListViewRemovalAnimation projet de code et Vidéo démonstration
Il a besoin Android 4.1+ API (16). Mais nous avons 2014 à l'extérieur.
Depuis
ListViews
sont hautement optimisé je pense que ce n'est pas possible de accieve. Avez-vous essayé de créer votre "ListView" par le code (c'est à dire par le gonflage de vos lignes de xml et en les ajoutant à unLinearLayout
) et de les animer?LinearLayout
, cependant, avec de très grands ensembles de donnéesLinearLayout
's performances devient catastrophique.ListView
a beaucoup de smart optimisations autour de vue de recyclage qui lui permettent de traiter de grands ensembles de données (iOS UITableView a les mêmes optimisations). L'écriture de mon propre point de vue recycleur relève de la catégorie de réimplanter ListView 🙁Avez-vous pensé à l'animation d'un balayage vers la droite? Vous pourriez faire quelque chose comme le dessin progressivement, une plus grande barre blanche dans la partie supérieure de l'élément de la liste, puis en le retirant de la liste. Les autres cellules serait encore jerk en place, mais ce serait mieux que rien.
appel
listView.scheduleLayoutAnimation();
avant de modifier la liste
J'ai bidouillé un autre moyen de le faire sans avoir à manipuler la vue liste. Malheureusement, régulière Android Animations semblent manipuler le contenu de la ligne, mais sont inefficaces à la réduction de la vue. Donc, d'abord considérer ce gestionnaire:
Ajouter cette collection à votre Liste de carte:
et ajouter
Prochain, partout où c'est que vous souhaitez masquer une ligne, ajouter ceci:
Que c'est! Vous pouvez modifier la vitesse de l'animation en modifiant le nombre de pixels qu'il prenne de la hauteur à la fois. Pas de réel sophistiqué, mais il fonctionne!
Après l'insertion d'une nouvelle ligne à la liste, je viens de faire défiler la liste à la nouvelle position.
Je n'ai pas essayé, mais il ressemble à animateLayoutChanges devriez faire ce que vous cherchez. Je le vois dans l'ImageSwitcher classe, je suppose que c'est dans le ViewSwitcher classe ainsi?
Depuis Android est open source, vous n'avez pas besoin de ré-écrire du ListView optimisations. Vous pouvez saisir du ListView code et essayer de trouver un moyen de pirater dans l'animation, vous pouvez également ouvrez une demande de fonctionnalité dans android bug tracker (et si vous avez décidé de la mettre en œuvre, n'oubliez pas de contribuer à un patch).
Pour info, la liste de code source est ici.
Voici la le code source pour vous permettre de supprimer des lignes et de les réorganiser.
Une démo fichier APK est également disponible. La suppression de lignes est fait plus le long des lignes de Google Gmail app qui révèle une vue de dessous après avoir introduit une vue de dessus. La vue d'en bas peut avoir un bouton "Annuler" ou ce que vous voulez.
Comme je l'avais expliqué ma démarche, dans mon site j'ai partagé le lien.De toute façon l'idée est de créer des images bitmap
par getdrawingcache .deux bitmap et animer le bas bitmap pour créer l'effet de bougé
Veuillez consulter le code suivant:
Pour comprendre avec des images voir ce
Grâce.
J'ai fait quelque chose de semblable à cela. Une approche consiste à interpoler sur le temps de l'animation à la hauteur de la vue plus de temps à l'intérieur des lignes
onMeasure
alors que l'émission derequestLayout()
pour le contrôle listView. Oui, il peut être mieux à faire à l'intérieur de la liste de code directement, mais c'était une solution rapide (qui avait l'air bien!)Juste partager une autre approche:
D'abord définir la liste de la vue android:animateLayoutChanges à vrai:
Puis-je utiliser un gestionnaire pour ajouter des éléments et de mettre à jour la liste avec un délai de: