Странный эффект с ImageView startAnimation в ListView - PullRequest
4 голосов
/ 18 июля 2011

через несколько месяцев после приезда сюда время от времени, наконец, моя очередь представить мою проблему:

У меня есть ListView с настраиваемым ArrayAdapter, который загружает изображения из Интернета (по одному изображению в строке). Я создал класс ImageCache, который вызывает метод onImageLoaded в моем ArrayAdapter:

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

Проблема заключается в том, что каждый раз, когда startAnimation (предположительно, fadeIn) вызывается в ONE ImageView, кажется, что анимация перезапускается с самого начала на всех анимированных в настоящее время ImageView, вызывая странное мигание нескольких (или всех) изображений при прокрутке.

Utils.log говорит, что startAnimation обычно вызывается (т.е. только один раз для каждого нового ImageView, появляющегося в ListView).

Содержимое моего анимационного XML таково:

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

Случалось ли это с кем-нибудь? Вы видите, что я делаю не так?

Спасибо!

1 Ответ

2 голосов
/ 16 декабря 2011

Проблема заключается в том, что вы загружаете анимацию и сохраняете ее вместо создания новой анимации каждый раз.

Пример решения:

public void onImageLoaded(Bitmap image, ImageView view){

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

Обратите внимание на зависимость этой строки кода от метода выше:

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