让排球的NetworkImageView显示本地图像文件 [英] Let Volley's NetworkImageView show local image files

查看:217
本文介绍了让排球的NetworkImageView显示本地图像文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 NetworkImageView 来显示一些涵盖了从远程URL下载的,我成功地管理缓存,并告诉他们,但我想,让用户可以根据自己的封面图片如果他们想要的。 我试图用 setImageUrl 方法 Uri.fromFile(mCoverFile)的ToString()作为参数,但是它不科技工作。既然是远程和本地图像的组合,我不能切换到普通的的ImageView S,所以我想知道是否有什么办法可以使负载的本地图像。

我当然知道的ImageView setImageBitmap 方法,但 NetworkImageView 自动调整所创建的位图还美元的<$中c p $ pvents 查看回收$ C>的GridView 和的ListView 秒。

更新: njzk2 的答案并获得成功。要根据你的查看的大小自动调整的位图,然后就从排球的源复制 ImageRequest.doParse 方法。

<类=h2_linDIV>解决方案

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 ImageViews, 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 GridViews and ListViews.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆