Android(安卓)Picasso-强大的图片下载缓存类库
16lz
2021-01-24
原博客链接:http://linkyan.com/2013/11/picasso/
Jake Wharton大牛写的又一力作,链式API的优雅,类库的简洁,谁用谁喜欢.
GitHub 项目地址->https://github.com/square/picasso
简介
在你的Android应用程序如果想要显示大量图片,而且视觉效果丰富,高效稳定,需要大量的基础工作.Picasso可以帮你完成这些工作,通常只需要一行代码!
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
在Android中很多图片加载时的陷阱都由Picaaso帮你自动处理:
- 在Adapter中处理ImageView的回收和下载取消
- 使用最小的内存完成复杂的图像变化
- 自动完成内存和磁盘缓存
特性
Adapter
Adapter中完成下载显示,并自动取消上一个下载请求
@Override public void getView(int position, View convertView, ViewGroup parent) { SquaredImageView view = (SquaredImageView) convertView; if (view == null) { view = new SquaredImageView(context); } String url = getItem(position); Picasso.with(context).load(url).into(view);}
图像转换
转换图片以更适应放入布局中,有效减少内存
Picasso.with(context) .load(url) .resize(50, 50) .centerCrop() .into(imageView)
你也可以手工处理,以实现更高级的效果
public class CropSquareTransformation implements Transformation { @Override public Bitmap transform(Bitmap source) { int size = Math.min(source.getWidth(), source.getHeight()); int x = (source.getWidth() - size) / 2; int y = (source.getHeight() - size) / 2; Bitmap result = Bitmap.createBitmap(source, x, y, size, size); if (result != source) { source.recycle(); } return result; } @Override public String key() { return "square()"; }}
预留图片
下载图片完成前或错误时,Picasso提供一个预留图片(placeholer)API,加载默认图片.
Picasso.with(context).load(url).placeholder(R.drawable.user_placeholder).error(R.drawable.user_placeholder_error).into(imageView);
加载资源
Resources, assets, files, content providers,在Picasso中都是支持加载的.
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);Picasso.with(context).load(new File("/images/oprah_bees.gif")).into(imageView2);
当然也有缺点
我们会发现,当我们想要获取缓存Bitmap的文件时,Picasso并没有这样的API,你只有在子线程中获取bitmap后,在存储一次.原因与HttpResponseCache类有关.
还没有对GIF做支持,我尝试过去支持,但是发现改动实在太大,遂放弃.老老实实用原来的.
超长图,还是用WebView解决吧,Picasso也做不到
谁在用?
豆瓣,蘑菇街,花瓣
更多相关文章
- 安卓日记——超简单的开发框架afinal
- Android(安卓)BaseAadapter 异步加载图片方法
- android:scaleType
- Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- Android大图片裁剪终极解决方案
- android内存管理(二)
- Android(安卓)图片异步下载及缓存--Multithreading For Performa
- XUtils-Android(安卓)最火的快速开发框架
- Android(安卓)中 加载Bitmap时,造成的Out of memory 问题