30 votes

Animation pour expandableListView

Est-il possible d'appliquer une animation de développement ou de réduction pour expandableListView?

10voto

ccpizza Points 2653

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:

..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.

1voto

Ajit Pratap Singh Points 749

J'ai fait un travail similaire pour une vue de liste simple.Pour ce faire, j'ai outrepassé la méthode getView et appliqué une animation de traduction vers le haut (ou vers le bas) sur chaque élément de la liste.Le degré de traduction a été décidé par la position de l'élément de la liste.

1voto

android developer Points 20939

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:

  1. 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.
  2. 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X