用于在线照片加载的Android图像库



我想制作一个应用程序,从我的网站加载图像URL(以JSONArray返回),然后在网格视图中显示图像(照片也在线,因此需要加载)。

问题是,我很困惑哪个库更容易使用,性能更好?

安卓查询还是安卓通用图像加载器(UIL)?

Android通用图像加载器是目前最受欢迎的一个。高度可定制的芭蕾舞裙。

AQuery;像jquery,但适用于Android?我想这很好,如果你喜欢那种事。不过不要使用这个;它会破坏UI线程或其他什么。在我的Nexus 4上以列表视图加载一堆图像,让我看起来又回到了我的HTC G1。主要口吃,芭蕾舞团。

更多:

毕加索拥有最好的图像API。我要偷他们的currying API风格为我的未来/当前的东西。毕加索显然也是最慢的。尤其是在3g与wifi之间。可能是由于他们的自定义okhttp客户端tuto。

UrlImageViewHelper+AndroidAsync是最快的。然而,玩这两个伟大的库确实突出了API的图像已经过时了。

Volley光滑;我真的很喜欢他们的可插拔后端传输,最终可能会在那里放弃AndroidAsync。请求优先级和取消管理很棒,谷歌I/O 2013演示,tuto。

建议您在Volley和Picasso之间做出选择

您可以使用Ionhttps://github.com/koush/ion或者毕加索http://square.github.io/picasso/,都很棒!

Picasso(By Square)非常有用且易于使用:http://square.github.io/picasso/

你应该调查一下。

对我来说:毕加索是一条路!

为什么?

  • 非常快
  • 稳定
  • 易于使用
  • 大部分是一行代码

我曾经使用Universal ImageLoader 1.9.0(UIL),直到我不得不使用带有OnScrollListener的ListView,在那里下载了接下来的10个项目,并且使用UIL滚动变得不够流畅,同时快速来回滚动,例如加载了50个项目。为了实现平滑滚动,我在UIL中尝试了不同的配置和选项(除了延迟选项外,没有帮助),我尝试了AQuery(快速,但滚动时的图像消失并再次出现,即使设置了占位符)和UrlImageViewHelper(快速,但是在"无网络连接"的情况下,我无法将可绘制内容设置为占位符),所以我最终选择了毕加索(这是我测试过的四幅作品中速度最快的一幅,因此滚动起来很流畅):)

但我不得不对NOSTRA13(UIL的创建者)大加赞扬,因为:

  • 简洁易用的文档
  • 易于使用
  • 多种选择
  • 稳定
  • 可靠的支持

测试环境:
Android HTC Desire X和非常弱的Wifi连接

编辑:
我收回了其他图像加载库更快的事实:UIL现在对我来说也是冠军!:)
我在第一次加载图像时总是有UIL的滚动滞后,我知道这与滚动有关,所以我在网上搜索更多信息,直到我发现了这篇漂亮的帖子:
使用UniversalImageDownloader滚动ListView不平滑
所以我设置了PauseOnScrollListener,看到那里,问题解决了
因此:UIL是数字1!

Android通用图像加载器的工作原理就像冠军。

这是一个很容易使用的例子

但是,基本上这就是将其与GridView:一起使用的方法

在预期的imports之后,您应该:

protected AbsListView list;
protected ImageLoader loader = ImageLoader.getInstance();
private String query;
final Context context = this;
private ItemAdapter adapter;
private DisplayImageOptions op;
@Override
public void onCreate(Bundle savedInstanceState) {
op = new DisplayImageOptions.Builder()
.displayer(new RoundedBitmapDisplayer(20))
.build();
list = (GridView) findViewById(R.id.gridViewSearch);
adapter = new ItemAdapter(images);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Do whatever you need to do after clicking an image.
}
});
}

当然,你需要adapter:

class ItemAdapter extends BaseAdapter {
private String[] imagesA;
public ItemAdapter(String [] Images){
this.imagesA = Images;
}
public void setData(String [] Images){
this.imagesA = Images;
}
private class ViewHolder {
public ImageView image;
}
@Override
public int getCount() {
return imagesA.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
v = getLayoutInflater().inflate(R.layout.image_in_gridview_layout, parent, false);
final ProgressBar spinner = (ProgressBar) v.findViewById(R.id.loading);
final ViewHolder holder = new ViewHolder();
holder.image = (ImageView) v.findViewById(R.id.grid_item_image);
v.setTag(holder);
loader.displayImage(imagesA[position], holder.image, op, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
spinner.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
spinner.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
}
});
return v;
}

最新更新