我正在使用Network
ImageView显示从远程URL下载的一些封面,我成功地设法缓存并显示它们,但我想让用户根据需要设置自己的封面图像.
我试图使用setImageUrl方法和Uri.fromFile(mCoverFile).toString()作为参数,但它不起作用.由于它是远程和本地图像的混合,我无法切换到常规的ImageViews,所以我想知道是否有任何方法可以加载本地图像.
我试图使用setImageUrl方法和Uri.fromFile(mCoverFile).toString()作为参数,但它不起作用.由于它是远程和本地图像的混合,我无法切换到常规的ImageViews,所以我想知道是否有任何方法可以加载本地图像.
我当然知道ImageView的setImageBitmap方法,但是NetworkImageView会自动调整创建的Bitmap的大小,并且还会阻止GridViews和ListViews中的View回收.
更新:njzk2的答案成功了.要根据您的视图大小自动调整位图,只需从Volley的源代码复制ImageRequest.doParse方法.
解决方法
NetworkImageView使用ImageLoader,而ImageLoader又使用ImageCache.
如果您对密钥使用相同的机制,则可以为图像提供自定义ImageCache:
return new StringBuilder(url.length() + 12).append("#W").append(maxWidth) .append("#H").append(maxHeight).append(url).toString();
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 } }
你使用它像:
imageView.setImageUrl(Uri.fromFile(mCoverFile).toString(),new MyCache());
(这还没有经过实际测试,可能会有一些调整)