ListView中使用ImageView startAnimation的奇怪效果

时间:2011-07-18 12:39:55

标签: android android-widget android-animation

经过几个月的到来之后,终于轮到我提交我的问题:

我有一个带有自定义ArrayAdapter的ListView,它可以从互联网上加载图像(每行一个图像)。我创建了一个ImageCache类,它在我的ArrayAdapter上调用onImageLoaded方法:

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

问题是每次在一个ImageView上调用startAnimation(假设为fadeIn)时,动画似乎从当前动画的所有ImageView-s开始重新运行,导致几个(或所有)图像的一些奇怪的闪烁滚动时。

Utils.log表示正常调用startAnimation(即对于ListView中出现的每个新ImageView只调用一次)。

我的动画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 个答案:

答案 0 :(得分:2)

问题是因为加载动画并存储它而不是每次都创建一个新的动画。

解决方案示例:

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);