Picasso 是Square公司开源的一个Android图形缓存库,实现图片下载和缓存功能。
官网地址:http://square.github.io/picasso/
下载地址:https://repo1.maven.org/maven2/com/squareup/picasso/picasso/
在线API:http://square.github.io/picasso/2.x/picasso/

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

Picasso主要有以下特点:

1.在adapter中取消不在视野范围的ImageView图片资源加载,解决了图片错位的问题;

2.使用最少的内存完成图片的转换;

3.实现的内存缓存和磁盘缓存。

4.图形的转换,比如大小、旋转等;

5.加载网络图片和本地图片。

Picasso使用起来相对于一般的图片下载也非常的简单:

一般图片下载主要有以下几个步骤:
1.使用异步任务加载图片(如:Handler + Thread),获取图片资源;

2.是一个BitmapFactory对图片进行解码,转换成Bitmap对象;

3.将图片显示到ImageView。

Picasso的简单使用

① 一行代码即可完成图片的加载和显示:

Picasso.with(context).load("http://img15.3lian.com/2015/h1/294/d/9.jpg").into(imageView);

当然在使用Picasso需要导入Picasso的包,如果是使用Eclipse开发,就通过上面提供的地址下载jar包,然后导入到项目中,如果是使用Android studio进行开发,就可以直接通过一下方式即可:

dependencies {// ... 项目中使用的其他包或库compile 'com.squareup.picasso:picasso:2.5.2'
}

另外一定要记得添加网络访问权限:

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

② Picasso不仅可以加载网络图片,也可以加载本地(资源)文件图片:

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.with(context).load(new File(...)).into(imageView3);

③ 轻易实现图形的转换:

// 指定图片大小
Picasso.with(context).load(url).resize(50, 50).centerCrop().into(imageView)
// 指定图片大小并旋转图片
Picasso.with(context).load(imgUrl).resize(width, height).centerCrop().rotate(30);.into(imageView);

④ 当ListView、GridView快速滑动时,使用Picasso不加载图片:

absListView.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_TOUCH_SCROLL) {//如果在暂停或者触摸的情况下开始加载PicassoUtils.newInstance(context).getPicasso().resumeTag(context);} else {//停止加载PicassoUtils.newInstance(context).getPicasso().pauseTag(context);}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {}
});

⑤ 指定正在加载和加载失败显示的图片:

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

⑥ 还可以自定义图形变换:

/*** 变换图片对象*/
public class ChangeTransformation implements Transformation {@Overridepublic Bitmap transform(Bitmap source) {// 将图片变换为圆形显示int width = source.getWidth();int height = source.getHeight();int centerX = width / 2;int centerY = height / 2;int radius = Math.min(width, height) / 2;Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);Canvas canvas = new Canvas(result);canvas.drawCircle(centerX, centerY, radius, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(source, 0, 0, paint);if (result == null) {result = source;}source.recycle();return result;}@Overridepublic String key() {// 返回一个唯一键用作缓存的目的return "change_transform - " + System.currentTimeMillis() + " - " + random.nextLong();}
}

关于Picasso更多的方法可以查看官方API文档,地址:http://square.github.io/picasso/2.x/picasso/

下面是一个简单的例子,效果图如下(因为上传的大小限制了,所以作为两张图片上传):

              

效果就是这样,下面说一下这个Demo代码的一些地方,主要是写了几个工具类:

1.Picasso的工具类PicassoUtils

这个类使用单例设计模式,全局使用一个,也就是全局使用一个Picasso对象,在Demo中我是在基类(BaseActivity)中初始化的;在PicassoUtils这个类中封装了一些加载图片的方法,加载图片时调用一个方法即可;另外在这个类中写了一个图形装换的方法的内部类,可以将图片转换为圆形和指定圆角大小的圆角矩形,其他转换可以根据需要进行扩展。

2.图形工具类BitmapUtils

这个类中都是静态方法,提供了一些对Bitmap对象操作的方法,包括将图片变为圆角矩形、圆形、对图片进行压缩处理、水平翻转原图、将彩色图片变为黑白图片等一些方法。

3.针对ListView和GridView这类控件类

在这个类中写了一个方法,调用这个方法,将ListView或GridView传入就可以实现快速滑动时不加载图片,手指触摸滑动或停止滑动时恢复加载图片。

Android图片加载框架二次封装,一行代码切换底层加载库:https://github.com/itrenjunhua/ImageLoader

Demo源代码已经上传,点击进入下载页下载Demo源码,源码是一个Android Studio项目,下载之后解压,直接用Android Studio打开即可,不要导入。

图片框架Picasso的简单使用相关推荐

  1. Android 框架学习4:一次读懂热门图片框架 Picasso 源码及流程

    Android 框架学习1:EventBus 3.0 的特点与如何使用 Android 框架学习2:源码分析 EventBus 3.0 如何实现事件总线 Android 框架学习3:我从 EventB ...

  2. 图片加载框架Picasso - 源码分析

    简书:图片加载框架Picasso - 源码分析 前一篇文章讲了Picasso的详细用法,Picasso 是一个强大的图片加载缓存框架,一个非常优秀的开源库,学习一个优秀的开源库,,我们不仅仅是学习它的 ...

  3. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据...

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  4. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  5. Glide Picasso Fresco UIL 图片框架 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. Glide Picasso Fresco UIL 图片框架 缓存 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. android图片框架对比(全)ImageLoader、Picasso、Glide、Fresco、Coil

    一.直接表格对比 红色代表严重缺点 对比项 ImageLoader Picasso Glide Fresco Coil 库是否维护 false true true true true 是否支持gif ...

  8. 强大的图片加载框架Picasso和Glide

    一.Picasso Picasso是Square公司出品的一个强大的图片下载和缓存图片库.官方网址是:http://square.github.io/picasso/ 只需要一句代码就可以将图片下载并 ...

  9. Android框架——下载图片框架Fresco

    版权声明:本文为博主原创文章,未经博主允许不得转载.转载注明出处:Sunzxyong 流行的网络框架 目前流行的网络图片框架:  Picasso.Universal Image Loader.Voll ...

最新文章

  1. 【独家】不懂逻辑怎么做PM,最详细产品逻辑课堂资料大公开!
  2. Flexbox弹性盒模型
  3. AttributeError: 'Polar AxesSubplot' object has no attribute 'set_axis_bgcolor'
  4. C#中的9个“黑魔法”与“骚操作”
  5. 转:json与map互转
  6. Python网络数据采集系列-------概述
  7. java通信rs485_基于VB6.0与485仪表的Modbus RTU通信(含代码)
  8. 剑指offer (02):实现 Singleton 单例模式 (Python 实现详解)
  9. selenium_java
  10. python---之suplot里面的twinx()函数
  11. C语言摇骰子比大小,三个骰子出点规律|玩3个骰子猜大小必赢技巧
  12. 18对个人财富的窥视——对一款手机木马的解读及分析
  13. JAVA Spring Security对接QQ快速登录(web应用)
  14. 计算机中的ip地址是什么 ???
  15. ISA禁止skype网络电话的原理
  16. 工作中需要将多张CAD图纸共同转换成DWF格式如何操作?
  17. yjk的波库在哪里_弹性时程分析——YJK盈建科软件操作.pdf
  18. springboot2.x集成ureport2.2.9搭建报表引擎
  19. NFT批量图片合成制作
  20. [区间DP 思路题] BZOJ 4350 括号序列再战猪猪侠

热门文章

  1. FZU 2282 错排
  2. atoi 和itoa用法
  3. 【报告分享】2021年春节档电影报告-艺恩(附下载)
  4. 在ECLIPSE导入项目后提示::具有不受限制的类路径容器:“JRE 系统库 [JVM 1.6.0]”
  5. 让工作效率提升200%的9款外贸工具
  6. 蓝牙技术|蓝牙的四种安全模式
  7. 【已解决】The pom for XXX is missing,no dependency information available
  8. muduo学习简单介绍
  9. 微软服务器安全补丁,微软发布10个安全补丁 修复26个漏洞
  10. 索尼wifi控制相机开发总结(五):Sony相机Wifi控制流程