让Volley的NetworkImageView显示本地图像文件

Vek*_*r88 6 android android-volley networkimageview

NetworkImageView 用来显示从远程URL下载的一些封面,我成功地设法缓存并显示它们,但我想让用户设置自己的封面图像,如果他们想要的话.我尝试使用setImageUrl带有Uri.fromFile(mCoverFile).toString()as参数的方法,但它不起作用.由于它是远程和本地图像的混合,我无法切换到常规ImageViews,所以我想知道是否有任何方法可以启用加载本地图像.

我当然知道的ImageViewsetImageBitmap方法,但NetworkImageView会自动调整创建Bitmap,也防止View回收的GridViewS和ListView秒.

更新: njzk2的答案奏效了.要根据您的View大小自动调整位图,只需ImageRequest.doParse从Volley的源代码中复制该方法.

njz*_*zk2 7

NetworkImageView使用ImageLoader,反过来使用ImageCache.

如果ImageCache您使用相同的键机制,则可以为图像提供自定义:

 return new StringBuilder(url.length() + 12).append("#W").append(maxWidth)
            .append("#H").append(maxHeight).append(url).toString();
Run Code Online (Sandbox Code Playgroud)

url 在实际请求完成之前未经过测试,所以这里没有问题.

通常,您的"缓存"可能如下所示:

public class MyCache implements ImageLoader.ImageCache {

    @Override
    public Bitmap getBitmap(String key) {
        if (key.contains("file://")) {
            return BitmapFactory.decodeFile(key.substring(key.indexOf("file://") + 7));
        } else {
            // Here you can add an actual cache
            return null;
        }
    }
    @Override
    public void putBitmap(String key, Bitmap bitmap) {
        // Here you can add an actual cache
    }
}
Run Code Online (Sandbox Code Playgroud)

你使用它像:

imageView.setImageUrl(Uri.fromFile(mCoverFile).toString(), new MyCache());
Run Code Online (Sandbox Code Playgroud)

(这还没有经过实际测试,可能会有一些调整)