Est-il possible d'appliquer une animation de développement ou de réduction pour expandableListView?
Réponses
Trop de publicités?Il peut être fait à l'aide d'un simple ListView qui contient initialement caché de la vue et d'une classe personnalisée qui s'étend de l'Animation.
L'idée de base est de commencer avec des View.GONE
puis de nouveau progressivement la taille de la marge à partir d'une valeur négative à la taille requise, tandis que la définition de la visibilité à l' View.VISIBLE
.
Voir:
- https://github.com/tjerkw/Android-SlideExpandableListView
- Android Animation: Masquer/Afficher Le Menu
- Comment puis-je animer Vue.setVisibility(DISPARU)
..et enfin
Le dernier exemple contient tout le code dont vous avez besoin. Ça ressemble un peu à hackish pour moi, surtout le fait que vous devez d'abord définir view.bottomMargin = -50
ou plus, sinon l'animation ne fonctionne pas correctement la première fois, mais jusqu'à présent je n'ai trouvé aucune solution de rechange viable (en dehors de l'utilisation d'un ScrollView avec votre propre contenant les éléments au lieu d'une liste).
Et enfin, cette application comprend l'exemple ci-dessus, parmi de nombreux autres exemples utiles avec des liens vers des sources:
Mise à jour: Google a retiré l'application depuis le play store prétendument pour violation de la propriété intellectuelle (bien qu'il ne contient que des démos et des liens à des projets open source), l'auteur fait l'apk disponible en téléchargement direct à partir de http://goo.gl/ihcgs Pour plus de détails, voir https://plus.google.com/108176685096570584154/posts. NB: je ne suis pas affilié avec l'auteur.
J'ai trouvé un possible (partielle) solution de contournement pour ce problème.
d'abord vous avez besoin pour stocker le défilement de l'état de la ExpnadableListView :
@Override
public void onScrollStateChanged(final AbsListView view, final int scrollState) {
this.mScrollState = scrollState;
}
public int getScrollState() {
return this.mScrollState;
}
pour la liste elle-même, vous avez besoin de stocker de groupe qui a été cliqué, alors que seuls ses enfants d'animation:
mListView.setOnGroupClickListener(...
@Override
public boolean onGroupClick(...){
mGroupPosition=groupPosition;
maintenant, dans le getChildView() la méthode, vous vérifiez l'état de la vitesse de défilement , et s'il est inactif, vous commencez à l'animation, par exemple:
public View getChildView(...) {
// <=prepare rootView and return it later
if (groupPosition==mGroupPosition&&getScrollState() == OnScrollListener.SCROLL_STATE_IDLE)
rootView.setAnimation(...)
ceci permettra de définir une animation pour l'enfant vues chaque fois que vous développez le groupe.
l'inconvénient, ce sont:
- seulement pour l'enfant développé points de vue. vous aurez besoin de penser à la logique supplémentaire pour les animer lors de l'effondrement du groupe.
- toutes les animations commencer à la fois . vous aurez besoin d'ajouter de multiples animations, l'une après l'autre, si vous souhaitez que cela pourrait fonctionner autrement.