我正在使用ListView
来显示一些与图像相关的标题和图像。 我正在从互联网上获取这些图像。 有没有一种方法可以懒加载图像,以便在文本显示时不会阻塞UI,并且图像会随着下载而显示?
图片的总数并不是固定的。
我正在使用ListView
来显示一些与图像相关的标题和图像。 我正在从互联网上获取这些图像。 有没有一种方法可以懒加载图像,以便在文本显示时不会阻塞UI,并且图像会随着下载而显示?
图片的总数并不是固定的。
我处理它的方式是启动一个线程在后台下载图像,并为每个列表项分配一个回调函数。当一张图片下载完成时,它会调用回调函数,更新列表项的视图。
然而,当您正在回收视图时,这种方法并不太有效。
我只想再补充一个很好的例子——XML Adapters。由于谷歌在使用它,我也使用了相同的逻辑来避免OutOfMemory错误。
基本上,这个ImageDownloader就是你的答案(因为它满足你大部分的需求)。你还可以在其中实现其他一些功能。
这是在Android上常见的问题,已经有许多人用许多方法解决了。在我看来,最好的解决方案是一个相对较新的库,叫作Picasso。以下是其要点:
Jake Wharton
领导。ListView
我一直在使用来自新的Android Volley库com.android.volley.toolbox.NetworkImageView
的NetworkImageView,它似乎运作得相当不错。显然,这是在谷歌应用商店和其他新的谷歌应用程序中使用的同一视图。绝对值得一看。
好的,从互联网加载图像有很多解决方案。您也可以使用库Android-Query。它会给您所有所需的活动。确保您想要做什么,并阅读库维基页面。并解决图像加载限制。
这是我的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
ImageView imageview = (ImageView) v.findViewById(R.id.icon);
AQuery aq = new AQuery(convertView);
String imageUrl = "http://www.vikispot.com/z/images/vikispot/android-w.png";
aq.id(imageview).progress(this).image(imageUrl, true, true, 0, 0, new BitmapAjaxCallback() {
@Override
public void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status) {
iv.setImageBitmap(bm);
}
));
return v;
}
这应该能解决你的懒加载问题。
我认为这个问题在Android开发者中非常流行,有很多库声称可以解决这个问题,但只有少数几个似乎达标。 AQuery是其中之一,但它在所有方面都比大多数库更好,并且值得尝试。
你必须尝试这个最佳的通用加载器。在懒加载方面,我已经进行了许多研究后使用了这个。
功能
支持Android 2.0+
看一下 Shutterbug,这是Applidium开发的轻量级SDWebImage(iOS上的一款不错的库)在Android上的移植版。
它支持异步缓存、存储失败的URL、良好处理并发,并包括有用的子类。
欢迎提交拉取请求(和错误报告)!
DroidParts拥有ImageFetcher,它无需任何配置即可开始使用。
克隆DroidPartsGram以获得示例:
setUrl
即可。 - Pascal Dimassimo