强大的图片下载缓存框架——Picasso

来源:互联网 发布:mac怎么打大写字母 编辑:程序博客网 时间:2024/06/14 02:04

调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步(来自csdn首页)

通过本篇文章您将学习到 Picasso 的基本使用方法和大概实现流程

1. 简介
Picasso中文译为毕加索,我们知道毕加索是当代西方最具有创造性和影响最深远的艺术家,从命名我们就可以看出此框架的强大。

Picasso是Square公司开源的一个Android图形缓存库,可以实现图片下载和缓存功能。

地址:http://square.github.io/picasso/,仅仅只需要一行代码就能完全实现图片的异步加载:

Picasso.with(context).load(url).into(mImg);

用起来是非常舒服的!

另外,Picasso不仅实现了图片异步加载的功能,还解决了android中加载图片时需要解决的一些常见问题:

1.在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题;
2.使用复杂的图片压缩转换来尽可能的减少内存消耗;
3.自带内存和硬盘二级缓存功能。

2. 基本使用

写在前面
使用 Picasso 时,在 AndroidStudio 环境中,在 build.gradle 添加
compile 'com.squareup.picasso:picasso:2.5.2'
然后Sync Now即可使用;
Picasso使用时需要添加的权限:

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


Adaper中的加载:适配器Adapter的重用会被自动检测到,Picasso会取消上次的加载

@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);

空白或者错误占位图片:Picasso 提供了两种占位图片,未加载完成或者加载发生错误的时需要一张图片作为提示(如果加载发生错误会重复三次请求,三次都失败才会显示加载错误的图片)

Picasso.with(context)    .load(url)    .placeholder(R.drawable.user_placeholder)    .error(R.drawable.user_placeholder_error)    .into(imageView);

资源文件的加载:除了加载网络图片 Picasso 还支持加载 Resources, assets, files, content providers 中的资源文件

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);Picasso.with(context).load(new File(...)).into(imageView2);

3.实现流程

Picasso 的总体流程
总的来说 Picasso 的流程很简单,当 Picasso 通过 load 方法获取图片的时候,需要经过如下步骤才能完成显示图片的流程:

① 将请求封装为 Request 对象,然后将 Request 对象进一步封装为 Action(ImageAction) 对象;

② 将 Action(ImageAction) 对象交给 Dispather 进行分发;

③ 最终将 action 交给 BitmapHunter 这个 Runnable 作为在线程池中线程的工作的单元(具体的是讲 action 持有的当前 Reqeuest 对象);

④ 由 RequestHandler 来处理当前 request ,调用其 load 方法将加载完成后的图片交给 PicassoDrawable 显示图片。

代码流程如下:Picasso->load->创建 request->创建 action->Dispatcher 分发 action->RequestHandler 的 load 方法处理具体的请求->PicassoDrawable 显示图片。

部分内容引用自http://square.github.io/picasso/
&& http://blog.csdn.net/chunqiuwei/article/details/52040064

0 0
原创粉丝点击