2012-05-22 3 views
0

J'essaye de trouver une sorte de solution élégante pour fondre dans/hors un TextView qui fait partie d'un article dans un ListView.Fading d'une vue dans un élément ListView - avec une torsion

Pour vous donner un peu de contexte, la liste affiche une liste de joueurs dans une partie de basketball. L'utilisateur appuie sur un nom et dispose d'une boîte de dialogue pour enregistrer un événement, par exemple un tir ou une faute pour ce joueur. Une fois que la boîte de dialogue est fermée, l'utilisateur est ramené à la liste et c'est ici que je souhaite fournir des commentaires sur l'événement qui vient d'être consigné.

La façon dont je voudrais le faire est d'avoir une petite chaîne apparaître pendant environ 5 secondes dans la vue de l'élément (joueur) qui vient d'être exploité. La petite chaîne afficherait quelque chose comme "3ème faute" ou "4 revirements".

Une implémentation naïve est simple. Remplacez le texte de la vue par la chaîne requise, puis démarrez une animation qui s'estompe dans la vue, la conserve pendant un certain temps, puis la masque. Des problèmes surviennent cependant lorsqu'un deuxième événement pour le même joueur est enregistré peu de temps après le premier. Idéalement, la première chaîne de rétroaction devrait être autorisée à rester pendant les 5 secondes allouées et la deuxième chaîne devrait apparaître/disparaître dans les 5 secondes suivantes.

Cette mise en file d'attente de l'animation et les changements de texte sur une base par joueur Je ne sais pas comment mettre en œuvre. De plus, je suis préoccupé par l'interaction entre les animations et le cycle de vie de l'activité. Que se passe-t-il (ou devrait-il arriver) dans les animations mises en file d'attente lorsque l'activité est envoyée en arrière-plan, arrêtée ou même supprimée de la mémoire? Ou lorsqu'un élément est supprimé de l'ArrayAdapter derrière la liste?

Pensées?

Manu

Répondre

1

Ne vous inquiétez pas au sujet du cycle de vie de l'activité. Il n'y aura pas d'effets indésirables. Cependant, si l'activité passe en arrière-plan pendant l'animation, l'animation aura lieu et vous ne la verrez pas.

Quant à haveing ​​une animation d'attente pour l'autre, il suffit de faire ceci:

// here we will keep track of any listView and when the last animation took place. 
// The keys will be your listView identifiers. Here I assumed an integer, but use whatever is a good ID for your listView 
private HashMap<Integer, Long> listViewLastAnimations; 

// the length of the animation in milliseconds 
private static long ANIMATION_LENGTH_MS = 5000; 

// put this code where you would start your animation 
// get when the last event animation occurred 
Long lastAnimation = listViewLastAnimations.get(YOUR_LIST_ITEM_IDENTIFIER); 
Date new = new Date(); 
if (lastAnimation == null || 
    new.currentTimeMillis() - lastAnimation > ANIMATION_LENGTH_MS){ 
listViewLastAnimations.put(YOUR_LIST_ITEM_IDENTIFIER, new.currentTimeMillis()); 
// perform animation as normal 
}else{ 
// set a delay to your animation with 
long delay = ANIMATION_LENGTH_MS - (new.currentTimeMillis() - lastAnimation); 
listViewLastAnimations.put(YOUR_LIST_ITEM_IDENTIFIER, new.currentTimeMillis() + delay); 
setStartOffset(delay) ; 
} 
+0

Merci Kyle pour votre réponse! J'aime sa simplicité! Je vais mettre en œuvre dans les prochains jours avec optimisme. Je vous le ferai savoir! – manu3d

Questions connexes