android - 通用图像加载器如何在图像加载时应用显示器?

时间:2015-02-27 07:25:34

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

我已经使用UIL加载并显示了一些来自互联网的图片。

        DisplayImageOptions options = new DisplayImageOptions.Builder()
            .displayer(new CircleBitmapDisplayer(0xFF70C7BE, 2))
            .showImageOnLoading(R.drawable.avatar)
            .showImageOnFail(R.drawable.avatar)
            .showImageForEmptyUri(R.drawable.avatar)
            .cacheOnDisk(true)
            .cacheInMemory(false)
            .imageScaleType(ImageScaleType.EXACTLY)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .build();

    //show image
    ImageLoader.getInstance().displayImage(imgURL, imgAvatar, options);

从代码中可以看出,我使用CircleBitmapDisplayer作为显示器,并使用图像设置showImageOnFail。

我面临的问题是显示器仅在图像加载成功时应用,但在图像加载失败时不应用。

那么当图像加载失败时,如何将显示器应用于showImageOnFail中的图像集?

2 个答案:

答案 0 :(得分:0)

onLoadingFailedonLoadingCancelled上编写代码。

imageLoader.displayImage(imageUri, imageView, options, new ImageLoadingListener() {
    @Override
    public void onLoadingStarted(String imageUri, View view) {
        ...
    }
    @Override
    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
        ...
    }
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        ...
    }
    @Override
    public void onLoadingCancelled(String imageUri, View view) {
        ...
    }
}, new ImageLoadingProgressListener() {
    @Override
    public void onProgressUpdate(String imageUri, View view, int current, int total) {
        ...
    }
});

了解更多信息,请参阅以下链接: -

https://github.com/nostra13/Android-Universal-Image-Loader

答案 1 :(得分:0)

正如Duggu建议的那样,使用ImageLoadingListener并将显示器应用于位图并将其提供给onLoadingFailed中的ImageView,而onLoadingCancelled可以某种方式解决问题。

这是最终的代码。

        ImageLoader.getInstance().displayImage(final_url, imgAvatar, options, new ImageLoadingListener() {
        @Override
        public void onLoadingStarted(String imageUri, View view) {
            new CircleBitmapDisplayer(0xFF70C7BE, 2).display(BitmapFactory.decodeResource(context.getResources(), R.drawable.avatar), (ImageView)view);
        }

        @Override
        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
            new CircleBitmapDisplayer(0xFF70C7BE, 2).display(BitmapFactory.decodeResource(context.getResources(), R.drawable.avatar), (ImageView)view);
        }

        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            new CircleBitmapDisplayer(0xFF70C7BE, 2).display(loadedImage, (ImageView)view);
        }

        @Override
        public void onLoadingCancelled(String imageUri, View view) {
            new CircleBitmapDisplayer(0xFF70C7BE, 2).display(BitmapFactory.decodeResource(context.getResources(), R.drawable.avatar), (ImageView)view);
        }
    });

我已修改CircleBitmapDisplayer的显示(...)以显示(Bitmap位图,ImageView imageAware)