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)