我正在使用ListView来显示与这些图像相关的一些图像和标题。我正在从互联网上获取图像。是否有一种方法可以延迟加载图像,以便在文本显示时,UI不会被阻止,图像在下载时显示?

图像总数不是固定的。


当前回答

Novoda还有一个很棒的懒人图像加载库,许多应用程序如Songkick、Podio、SecretDJ和ImageSearch都使用其库。

他们的库托管在Github上,他们还有一个非常活跃的问题跟踪程序。他们的项目似乎也很活跃,在撰写回复时提交了超过300次。

其他回答

我只想再添加一个很好的示例,XML适配器。由于它被谷歌使用,我也在使用相同的逻辑来避免OutOfMemory错误。

基本上,这个ImageDownloader就是你的答案(因为它涵盖了你的大部分需求)。有些也可以在其中实现。

我使用droidQuery。从URL加载图像有两种机制。第一个(速记)简单地是:

$.with(myView).image(url);

这可以很容易地添加到ArrayAdapter的getView(…)方法中。


longhand方法将提供更多的控制,并具有此处未讨论的选项(如缓存和回调),但可以在此处找到将输出大小指定为200px x 200px的基本实现:

$.ajax(new AjaxOptions().url(url)
    .type("GET")
    .dataType("image")
    .imageWidth(200).imageHeight(200)
    .success(new Function() {
        @Override
        public void invoke($ droidQuery, Object... params) {
            myImageView.setImageBitmap((Bitmap) params[0]);
        }
    })
    .error(new Function() {
        @Override
        public void invoke($ droidQuery, Object... params) {
            AjaxError e = (AjaxError) params[0];
            Log.e("$", "Error " + e.status + ": " + e.error);
        }
    })
);

看看Shutterbug,Applidium的轻量级SDWebImage(iOS上的一个不错的库)到Android的端口。它支持异步缓存,存储失败的URL,很好地处理并发,并包含有用的子类。

也欢迎拉取请求(和错误报告)!

以上所有代码都有自己的价值,但根据我的个人经验,请尝试一下毕加索。

Picasso是专门用于此目的的库,实际上它将自动管理缓存和所有其他网络操作。您必须在项目中添加库,只需编写一行代码即可从远程URL加载图像。

请访问此处:http://code.tutsplus.com/tutorials/android-sdk-working-with-picasso--cms-22149

我发现滑翔机比毕加索更好。我使用picasso加载了大约32张图片,每张图片的大小约为200-500KB,而且我总是得到OOM。但滑翔机解决了我所有的OOM问题。