为什么我应该通过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;
}
另一个问题:
Picasso是在UI中还是通过后台线程下载图像?
答案 0 :(得分:99)
仅适用于Android新手或者从iOS移动到Android的任何人的记录..........
老实说,就这么简单。优点令人难以置信。
这很容易使用:
Picasso.
with(State.mainContext).
load(parseImageFile.getUrl()).
into(null);
你很简单:
就这么简单。除非您想从头开始编写,否则您只需使用Picasso。
请注意, ParseImageFile 基本上不起作用 - 它对缓存等完全没用。 Picasso有很多令人钦佩的替代品(例如Universal Image Loader,请查看),但是现在2014年没有像Picasso那样有效。
注意如果你转向超高级的东西...... 唯一比毕加索更好的就是转向Volley。但这是一个巨大的飞跃。
请注意,在Android上滚动ListView比在iOS上滚动表格要困难得多。你可以说,Android + Picasso更像iOS上的情况,在这里已经完成了用图像滚动大型表视图的所有工作。
今天,毕加索只是 - 任何Android应用程序的核心部分。谢天谢地,这是一行代码 - 没有设置,没有。
再次,唯一的事情"比#34;更好毕加索是你搬到Volley的。
如果你需要的话,BTW这里有一篇关于Volley v.Picasso的精彩长篇文章......http://www.bignerdranch.com/blog/solving-the-android-image-loading-problem-volley-vs-picasso/
答案 1 :(得分:35)
Picasso在另一个帖子中下载图片并为您管理:
这非常简单,这是一个例子:
Picasso.with(context)
.load(url)
.placeholder(R.drawable.placeholder)
.resize(imgWidth, imgHeight)
.centerCrop()
.into(image);
答案 2 :(得分:12)
我总是使用 Picasso Library 来制作图像。
它对于管理图像非常有用,而且不用担心内存问题。
当我'从服务器或json下载图像,我用
Picasso.with(context).load("image url").into(ImageView);
我将该图片网址存储到数据库或其他地方 现在我们可以在任何地方使用该图像(也可以离线)。
unique_ptr
答案 3 :(得分:5)
Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/files/images/04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView,
new Callback() {@
Override
public void onSuccess() {}@
Override
public void onError() {}
});
您应该通过Picasso库下载图像,原因如下:
fit()
- 由于尺寸的原因,有时某些图片无法在imageview中加载。此方法将帮助您加载大图像。onSuccess()
- 您可以在图片成功加载时执行某些操作。onError()
- 您可以在加载图片时遇到问题时执行某些操作。答案 4 :(得分:2)
您应该使用像Picasso,Volley或Universal Image Loader这样的图像加载器库,因为它们执行以下代码无法执行的操作:
顺便说一下,你必须永远不要在UI线程上执行网络请求,因为HoneyComb,Android不允许你这样做。
答案 5 :(得分:2)
我知道Picasso是一个用于管理ListView和GridView中图像的绝佳库,但在包括Picasso在内的所有选项中,我使用了GLIDE ......
它真正管理下载&完美缓存......(我无法让Picasso在下载完成后使用缓存图像但Glide就像一块蛋糕一样)。
以下是GLIDE的Github页面:
https://github.com/bumptech/glide
...问候
答案 6 :(得分:2)
如果您将使用从网络加载图像的核心方法,那么将需要更多的代码。但是如果我们使用像毕加索这样的第三方图书馆,那么我们将在几行代码中实现我们的目标 而毕加索图书馆是迄今为止我发现的最好和最简单的图书馆。 我们只需编写以下内容即可使用毕加索从互联网加载图像。
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来完成它。
答案 7 :(得分:0)
请在build.gradle(Module:app)
compile 'com.github.bumptech.glide:glide:3.6.1'
答案 8 :(得分:0)
Picasso自动处理与图像下载相关的所有陷阱,例如缓存下载的图像,查找缓存,取消现有请求,执行图像转换和解码,调整图像大小和裁剪。
它允许您自定义它,您可以为缓存配置内存,添加用于向每个请求添加全局信息的请求转换器,添加位图配置以处理默认位图配置未涵盖的格式的解码图像。
它允许您指定内存策略和网络策略,使其可以使用缓存或从网络下载。它允许您添加占位符和错误图像,以便在下载时使用,并且在下载时分别出错。
Picasso在工作线程上异步下载图像。
以下是使用Picasso最新版本2.71828将图像加载到工作线程上的ImageView的代码。
Picasso.get().load(productImageUrl).into(imageView);
下面的代码调整大小并裁剪图像。
有关信息,请参阅http://www.zoftino.com/android-picasso-image-downloading-and-caching-library-tutorial。 。Picasso.get()负载(productImageUrl).resize(400400).centerCrop()代入(ImageView的);