我想制作一个从我的网站加载图片网址的应用程序(在JSONArray中返回),然后在网格视图中显示图片(照片也在线,因此需要加载)。
问题是我很困惑哪个库更容易使用并且性能更好?
Android查询或Android通用图片加载程序(UIL)?
答案 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 presentation,tuto。
我建议你在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;
}