为什么要使用Android Picasso库来下载图像?
为什么我应该通过Picasso库下载图像,而不是使用这个代码:
private Bitmap DownloadImage(String URL) { Bitmap bitmap = null; InputStream in = null; try { in = OpenHttpGETConnection(URL); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (Exception e) { Log.d("DownloadImage", e.getLocalizedMessage()); } return bitmap; }
另一个问题:
毕加索是下载图像在用户界面或后台线程?
只为logging任何新的Android或从iOS移动到Android ……….
直到事情发生巨大变化,你绝对必须使用毕加索。 不是一个笑话。
老实说,那很简单。 好处是难以置信的。
这是很容易使用的:
Picasso. with(State.mainContext). load(parseImageFile.getUrl()). into(null);
你很简单:
必须在Android上进行caching和线程处理。
就这么简单。 除非你想从头开始写,否则你只能使用毕加索。
请注意, ParseImageFile本质上不起作用 – 这是完全无用的caching等。 毕加索有很好的select(比如通用图像加载程序,请查看),但现在还没有像毕加索那样工作,现在是2014年。
请注意,如果你转向超先进的东西……比毕加索更好的唯一办法就是转向排雷。 但这是一个巨大的飞跃。
请注意,Android上的ListView滚动比iOS上的表格滚动更麻烦得多。 你可以说,Android +毕加索更像是iOS上的情况,所有的工作已经完成了滚动大型表视图与图像。
对于今天,毕加索是 – 简单地说 – 任何Android应用程序的核心部分。 谢天谢地,这是一行代码 – 没有设置,什么都没有。
再一次,唯一比“毕加索”更好的是如果你搬到Volley。
顺便说一句,这是关于Volley v。Picasso的一篇长篇文章,如果你需要的话…
http://www.bignerdranch.com/blog/solving-the-android-image-loading-problem-volley-vs-picasso/
毕加索在另一个线程下载图像,它为您pipe理:
- 在此期间的占位符图像仍在下载
- 调整
- 裁剪/定心/缩放
- caching(您不必每次都下载图片)
- 甚至现在stream行/正常的“形象淡入”
这非常简单,下面是一个例子:
Picasso.with(context) .load(url) .placeholder(R.drawable.placeholder) .resize(imgWidth, imgHeight) .centerCrop() .into(image);
我总是使用毕加索图书馆的图像。
这对pipe理图像非常有用,不用担心内存问题。
当我从服务器或JSON下载图像时,我使用了
Picasso.with(context).load("image url").fetch();
而且我将这个图像的url存储到数据库或其他地方。
现在我们可以在任何地方使用该图像(离线)。
Picasso.with(context).load("image url").into(ImageView);
Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/fileshttp://img.dovov.com04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView, new Callback() {@ Override public void onSuccess() {}@ Override public void onError() {} });
您应该通过毕加索图书馆下载图像,原因如下:
- 您可以放置一个占位符,以防图片需要一些时间加载。
-
fit()
– 有时某些图像因为大小而无法在imageview中加载。 此方法将帮助您加载大图像。 -
onSuccess()
– 您可以在图像加载成功时执行一些操作。 -
onError()
– 当加载图像出现问题时,您可以执行一些操作。
您应该使用像毕加索,排球或通用图像加载器的图像加载器库,因为他们做了以下事情,您的代码不会:
- 高效的multithreadingnetworking(当然后台线程)
- 将多个相同的请求组合成一个networking呼叫
- 取消待处理的请求,特别是在ListView项目回收期间
- 磁盘和内存caching与各种过期策略
- 将图像下采样到目标视图大小以提高性能并减less内存使用量
- 批量UI更新以提高UI响应性(至less对于Volley和Picasso)。
顺便说一句,你绝不能在UI线程上执行networking请求,而且由于HoneyComb,Android不允许你这样做。
我知道毕加索是一个很棒的库,用于pipe理ListView和GridView中的图像,但在包括毕加索在内的所有选项中,我都使用GLIDE …
它真的pipe理下载和caching完美…(我无法让毕加索在下载完成后使用caching的图像,但Glide做到了,就像一块蛋糕)。
这里是GLIDE的Github页面:
https://github.com/bumptech/glide
问候….
如果您将使用从networking加载图像的核心方法,那么将需要更多的代码。 但是,如果我们将使用像毕加索这样的第三方库,那么我们将在几行代码中实现我们的目标。
而毕加索图书馆是迄今为止我发现的最好,最简单的图书馆。 我们只需要写下面的内容来使用picasso加载来自互联网的图像。
Picasso.with(this) .load("YOUR IMAGE URL HERE") .placeholder(Your Drawable Resource) //this is optional the image to display while the url image is downloading .error(Your Drawable Resource) //this is also optional if some error has occurred in downloading the image this image would be displayed .into(imageView);
但是,如果我们不使用picasso库或任何其他库,我们可能需要使用AsyncTask,这将需要更多的代码行。
来源: 毕加索Android教程
请在您的build.gradle(Module:app)
添加以下依赖项
compile 'com.github.bumptech.glide:glide:3.6.1'