让排球的NetworkImageView显示本地图像文件 [英] Let Volley's NetworkImageView show local image files
问题描述
我使用 NetworkImageView
来显示一些涵盖了从远程URL下载的,我成功地管理缓存,并告诉他们,但我想,让用户可以根据自己的封面图片如果他们想要的。
我试图用 setImageUrl
方法 Uri.fromFile(mCoverFile)的ToString()
作为参数,但是它不科技工作。既然是远程和本地图像的组合,我不能切换到普通的的ImageView
S,所以我想知道是否有什么办法可以使负载的本地图像。
我当然知道的ImageView
的 setImageBitmap
方法,但 NetworkImageView
自动调整所创建的位图
还美元的<$中c p $ pvents 查看
回收$ C>的GridView 和的ListView
秒。
更新: njzk2 的答案并获得成功。要根据你的查看
的大小自动调整的位图,然后就从排球的源复制 ImageRequest.doParse
方法。
NetworkImageView
使用 ImageLoader的
,这又使用了 ImageCache
。
您可以提供自定义的 ImageCache
与您的图像,只要你使用相同的机制为关键:
返回新的StringBuilder(url.length()+ 12).append(#W)。追加(了maxWidth)
。.append(#H)追加(了maxHeight).append(URL)的ToString();
网址
未测试的实际要求会做之前,所以没有问题在这里。
通常情况下,你的缓存可能是这样的:
公共类MyCache实现ImageLoader.ImageCache {
@覆盖
公共位图getBitmap(字符串键){
如果(key.contains(文件://)){
返回BitmapFactory.de codeFILE(key.substring(key.indexOf(文件://)+ 7));
} 其他 {
//在这里你可以添加一个实际的缓存
返回null;
}
}
@覆盖
公共无效putBitmap(字符串键,位图位图){
//在这里你可以添加一个实际的缓存
}
}
您使用它喜欢的:
imageView.setImageUrl(Uri.fromFile(mCoverFile)的ToString(),新MyCache());
(这还没有得到实际测试,可能会有一些调整,做)
I am using NetworkImageView
to show some covers downloaded from a remote URL and I successfully manage to cache and show them, but I want to let users set their own cover images if they want.
I tried to use setImageUrl
method with Uri.fromFile(mCoverFile).toString()
as arguments, but it doesn't work. Since it is a mix of remote and local images I can't switch to regular ImageView
s, so I was wondering if there's any way to enable loading of local images.
I am of course aware of the ImageView
's setImageBitmap
method, but NetworkImageView
automatically resizes the created Bitmap
and also prevents View
recycling in GridView
s and ListView
s.
UPDATE: njzk2's answer did the trick. To autoresize the Bitmap according to your View
size, then just copy the ImageRequest.doParse
method from Volley's source.
NetworkImageView
uses ImageLoader
, which in turn uses an ImageCache
.
You can provide a custom ImageCache
with your images, provided you use the same mechanism for keys:
return new StringBuilder(url.length() + 12).append("#W").append(maxWidth)
.append("#H").append(maxHeight).append(url).toString();
url
is not tested before the actual request would be done, so no issue here.
Typically, your 'cache' could look like :
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
}
}
You use it like :
imageView.setImageUrl(Uri.fromFile(mCoverFile).toString(), new MyCache());
(This has not been actually tested and there may be some adjustments to do)
这篇关于让排球的NetworkImageView显示本地图像文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!