通用图像加载器使用2个显示器

4

我该如何在我的图片中添加FadeInBitmapDisplayer和RoundedBitmapDisplayer?

这是我的DisplayImageOptions:

options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.appwidget
.cacheInMemory().displayer(new FadeInBitmapDisplayer(1500))
.build();

是否有办法仅使用淡入效果一次?如果已经加载,我滚动列表并再次向上滚动,它不会再次淡入吗?

非常感谢您的帮助!

3个回答

11
我如何将FadeInBitmapDisplayer和RoundedBitmapDisplayer添加到我的图像中?
在当前版本中无法实现。 您可以创建自己的显示器(扩展BitmapDisplayer),并将FadeInBitmapDisplayer和RoundedBitmapDisplayer的代码复制到您的类中。
是否有可能仅使用一次淡入效果?
几乎一切皆有可能 :) 但这会不太方便。
您可以在某个映射中保留显示的图像URL(Map = [Image URL < - > isDisplayed]),并在调用imageLoader.displayImage(...)之前检查该映射。 如果当前URL的图像已包含在Map中(即已显示图像),则使用仅带有RoundedBitmapDisplayer选项的选项。 如果当前URL的图像不在Map中,则使用具有FadeInBitmapDisplayer + RoundedBitmapDisplayer显示器的选项。

好的,非常感谢!您会在未来版本中实现这样的功能吗?(对于淡入和圆角) - user754730
1
也许我会像装饰器一样制作显示器,以允许它们互相包装。等着瞧吧。 - nostra13

5
我该如何在我的图像上添加FadeInBitmapDisplayer和RoundedBitmapDisplayer?
我也遇到了这个问题。我使用了NOSTRA的建议,这是我的自定义类:
public class FadeInRoundedBitmapDisplayer extends RoundedBitmapDisplayer {

    int durationMillis;
    String noRoundedCornersTag;

    public FadeInRoundedBitmapDisplayer(int durationMillis, int roundPixels,
            String noRoundedCornersTag) {
        super(roundPixels);
        this.durationMillis = durationMillis;
        this.noRoundedCornersTag = noRoundedCornersTag;
    }

    @Override
    public Bitmap display(Bitmap bitmap, ImageView imageView,
            LoadedFrom loadedFrom) {
        imageView.setImageBitmap((imageView.getTag() != null && imageView
                .getTag().equals(noRoundedCornersTag)) ? bitmap : super
                .display(bitmap, imageView, loadedFrom));

        animate(imageView, durationMillis);

        return bitmap;
    }

    public static void animate(ImageView imageView, int durationMillis) {
        AlphaAnimation fadeImage = new AlphaAnimation(0, 1);
        fadeImage.setDuration(durationMillis);
        fadeImage.setInterpolator(new DecelerateInterpolator());
        imageView.startAnimation(fadeImage);
    }

}

您可以将String noRoundedCornersTag传递给构造函数。这使您能够在XML布局中为单个imageView提供该标签,以跳过圆角半径处理(适用于背景图像等),例如:

<ImageView
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:tag="@string/no_rounded_corners_tag" />

构造函数的调用应该像这样:

new FadeInRoundedBitmapDisplayer(Constants.IMAGE_FADING_TIME,
  getResources().getDimension(R.dimen.image_corner_radius),
  getResources().getString(R.string.no_rounded_corners_tag))

已经能够完成工作了。但对于其他遇到同样问题的人来说可能非常有趣。这是一段很棒的代码。 - user754730

3

由于@saschoar提供的解决方案在当前的Universal Image Loader版本(1.9.4)中无法正常工作,因此我必须进行更新。新的解决方案非常类似,请看以下:

public class FadeInRoundedBitmapDisplayer extends RoundedBitmapDisplayer {

    int durationMillis;

    public FadeInRoundedBitmapDisplayer(int durationMillis, int roundPixels) {

        super(roundPixels);
        this.durationMillis = durationMillis;
    }

    @Override
    public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {

        super.display(bitmap, imageAware, loadedFrom);

        animate(imageAware.getWrappedView(), durationMillis);
    }

    public static void animate(View imageView, int durationMillis) {

        AlphaAnimation fadeImage = new AlphaAnimation(0, 1);
        fadeImage.setDuration(durationMillis);
        fadeImage.setInterpolator(new DecelerateInterpolator());
        imageView.startAnimation(fadeImage);
    }
}

您可以使用以下方式定义DisplayImageOptions解决方案:
    DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder()
        .displayer(new FadeInRoundedBitmapDisplayer(3000, 1000))
        .build();

    ImageLoader imageLoader = ImageLoader.getInstance();
    imageLoader.displayImage(imageUrl, imageView, displayImageOptions);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接