哪个Android图片库用于在线照片加载

时间:2014-02-21 02:09:12

标签: android image grid photo

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

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

Android查询或Android通用图片加载程序(UIL)?

5 个答案:

答案 0 :(得分:4)

Android Universal Image Loader 是目前最受欢迎的。高度可定制,tuto

<强> AQuery ;像jquery,但对于Android?我想这很好,如果你有这样的事情。不要使用这个;它在UI线程或其他东西上扯淡。在列表视图中加载我的Nexus 4上的一堆图像,看起来我再次回到我的HTC G1上。主要口吃,tuto

更多:

Picasso 拥有最好的图片API。我将为我未来/当前的东西窃取他们的currying API风格。毕加索也是最慢的。特别是3g对wifi。可能是由于他们的自定义okhttp客户端tuto

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

Volley 是光滑的;我真的很喜欢他们的可插拔后端传输,并可能最终放弃AndroidAsync。请求优先级和取消管理非常好,Google I/O 2013 presentationtuto

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

答案 1 :(得分:3)

您可以使用离子https://github.com/koush/ion或Picasso by square http://square.github.io/picasso/,两者都很棒!

答案 2 :(得分:2)

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

你应该调查一下。

答案 3 :(得分:2)

对我来说:毕加索是要走的路!

为什么呢?

  • 非常快
  • 稳定
  • 易于使用
  • 主要是一行代码

我以前使用Universal ImageLoader 1.9.0(UIL),直到我不得不使用带有OnScrollListener的ListView,其中下载的10个项目和UIL的滚动变得不够流畅而来回快速滚动例如,加载了50个项目。 为了实现平滑滚动,我在UIL中尝试了不同的配置和选项(除了延迟选项之外没有帮助)我尝试了AQuery(快速,但滚动图像消失了,即使使用占位符集也会再次出现)和UrlImageViewHelper(快速,但我无法在“无网络连接”的情况下将drawable设置为占位符),所以我最终得到了Picasso(我测试过的四个中最快的,因此平滑滚动):)

但是我必须对NOSTRA13(UIL的创造者)表示敬意,因为:

  • 简洁易懂的文档
  • 易于使用
  • 许多选项
  • 稳定
  • 可靠的支持

测试环境:
Android HTC Desire X和非常弱的Wifi-Connection。

修改
我正在收回其他图像加载库更快:UIL现在也是我的冠军! :)
在第一次加载图像时我总是使用UIL滚动延迟,我知道它与滚动有关,所以我在网上搜索更多信息,直到找到这个漂亮的帖子:
ListView scrolling using UniversalImageDownloader not smooth
所以我设置PauseOnScrollListener并看到那里,问题解决了!
因此:UIL是1号!

答案 4 :(得分:1)

Android Universal Image Loader就像一个冠军。

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

但是,基本上这是使用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;
 }