2011-07-18 5 views
4

après quelques mois de venir ici maintenant et il est enfin mon tour de soumettre mon problème:effet étrange avec ImageView DebuterAnimation dans ListView

J'ai un ListView avec un ArrayAdapter personnalisé qui charge les images de l'Internet (une image par rangée). J'ai fait une classe ImageCache qui appelle une méthode onImageLoaded sur mon ArrayAdapter:

public void onImageLoaded(Bitmap image, ImageView view){ 
    view.setImageBitmap(image); 
    Utils.log("start animation : " + view.toString()); 
    view.startAnimation(mAnim); 
} 

Le problème est chaque DebuterAnimation de temps (soi-disant un fadeIn) est appelé ONE ImageView, l'animation semble réexécuter dès le départ sur TOUS ImageView-s en cours d'animation, provoquant un clignotement bizarre de plusieurs (ou toutes) images lors du défilement. Utils.log dit que startAnimation est appelé normalement (c'est-à-dire qu'une seule fois pour chaque nouvelle ImageView apparaissant dans le ListView).

Le contenu de mon XML d'animation est en tant que tel:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:shareInterpolator="true"> 
    <alpha 
     android:fromAlpha="0.0" 
     android:toAlpha="1.0" android:duration="400"/> 
</set> 

a ce jamais arrivé à quelqu'un? Pouvez-vous voir ce que je fais mal?

Merci!

Répondre

2

Le problème est dû au chargement de l'animation et à son stockage au lieu de créer une nouvelle animation à chaque fois.

Exemple de solution:

 
public void onImageLoaded(Bitmap image, ImageView view){ 

    view.setImageBitmap(image); 
    Animation fadeInAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.fade_in); 
    view.startAnimation(fadeInAnimation); 
} 

Notez la dépendance de cette ligne de code à la méthode ci-dessus:

Animation fadeInAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.fade_in);

+1

Oui c'est exact, merci. Je l'ai découvert il y a quelque temps et j'aurais dû poster la solution, ma mauvaise. Merci quand même, cela peut être utile à d'autres personnes. – darma

Questions connexes