通用图像加载器和BitmapDrawable

时间:2016-01-21 07:54:10

标签: android universal-image-loader android-bitmap bitmapdrawable

我们在B64中有一个图像,我们想要将该图像用作在Universal Image Loader中加载图像,而不是从URL加载更好的图像。所以我们在b64中从该url创建一个位图并将其转换为BitmapDrawable。 如果我这样做,结果显示正常:

imageView.setImageDrawable(bitmapDrawable)

但是,在DisplayImageOptions上,如果我在加载时将bitmapDrawable设置为图像,则永远不会显示图像。我正在做以下事情:

final DisplayImageOptions imageOptions = mDisplayImageOptionsDefaultBuilder.
        .showImageOnLoading(bitmapDrawable)
        .showImageOnFail(bitmapDrawable)
        .showImageForEmptyUri(bitmapDrawable)
        .build()

正如你所看到的,我设置的位图不仅可以在加载时绘制为图像,还可以在失败时设置为图像(因为我们不希望在从网址加载更好的图像时出现错误时图像会发生变化)。结果是从未显示位图drawable。我们做错了什么?

更新: 在调试发生了什么后,我发现问题不是位图可绘制,它支持并且工作正常。问题是我使用默认的显示选项构建器(mDisplayImageOptionsDefaultBuilder),而不是在某些时候:

final DisplayImageOptions imageOptions = mDisplayImageOptionsDefaultBuilder.
        .showImageOnLoading(loadingResource)
        .showImageOnFail(errorResource)
        .showImageForEmptyUri(errorResource)
        .build()

因此Universal Image Loader中存在一个错误,因为现在我正在创建一个显示图像选项:

.showImageOnLoading(bitmapDrawable)

另一个“解决方案”是:

final DisplayImageOptions imageOptions = mDisplayImageOptionsDefaultBuilder.
        .showImageOnLoading(0)
        .showImageOnLoading(loadingResource)
        .showImageOnFail(errorResource)
        .showImageForEmptyUri(errorResource)
        .build()

但在内部它存储了存储的资源,因此我的drawable不会显示,而是显示存储的资源。创建一个新的DisplayImageOptionsBuilder对我有用,但如果使用drawable设置showImageOnLoading会很好,那么旧资源会自动清除。

提前致谢。

2 个答案:

答案 0 :(得分:0)

UIL仅支持以下方案:

"h t t p://site.com/image.png" // from Web
"file:///mnt/sdcard/image.png" // from SD card
"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)
"content://media/external/images/media/13" // from content provider
"content://media/external/video/media/13" // from content provider (video thumbnail)
"assets://image.png" // from assets
"drawable://" + R.drawable.img // from drawables (non-9patch images)

使用这些方案。

答案 1 :(得分:0)

Universal Image Loader还提供了使用Background功能。请检查以下编辑: -

此处Uri是文件夹图像的路径或图像的URL。

imageLoader.loadImage(YOUR_URL, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
   super.onLoadingComplete(imageUri, view, loadedImage);
   layout.setBackgroundDrawable(new BitmapDrawable(loadedImage));
  }
});