图片框架Picasso的简单使用
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的简单使用相关推荐
- Android 框架学习4:一次读懂热门图片框架 Picasso 源码及流程
Android 框架学习1:EventBus 3.0 的特点与如何使用 Android 框架学习2:源码分析 EventBus 3.0 如何实现事件总线 Android 框架学习3:我从 EventB ...
- 图片加载框架Picasso - 源码分析
简书:图片加载框架Picasso - 源码分析 前一篇文章讲了Picasso的详细用法,Picasso 是一个强大的图片加载缓存框架,一个非常优秀的开源库,学习一个优秀的开源库,,我们不仅仅是学习它的 ...
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据...
OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...
- Glide Picasso Fresco UIL 图片框架 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Glide Picasso Fresco UIL 图片框架 缓存 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- android图片框架对比(全)ImageLoader、Picasso、Glide、Fresco、Coil
一.直接表格对比 红色代表严重缺点 对比项 ImageLoader Picasso Glide Fresco Coil 库是否维护 false true true true true 是否支持gif ...
- 强大的图片加载框架Picasso和Glide
一.Picasso Picasso是Square公司出品的一个强大的图片下载和缓存图片库.官方网址是:http://square.github.io/picasso/ 只需要一句代码就可以将图片下载并 ...
- Android框架——下载图片框架Fresco
版权声明:本文为博主原创文章,未经博主允许不得转载.转载注明出处:Sunzxyong 流行的网络框架 目前流行的网络图片框架: Picasso.Universal Image Loader.Voll ...
最新文章
- 【独家】不懂逻辑怎么做PM,最详细产品逻辑课堂资料大公开!
- Flexbox弹性盒模型
- AttributeError: 'Polar AxesSubplot' object has no attribute 'set_axis_bgcolor'
- C#中的9个“黑魔法”与“骚操作”
- 转:json与map互转
- Python网络数据采集系列-------概述
- java通信rs485_基于VB6.0与485仪表的Modbus RTU通信(含代码)
- 剑指offer (02):实现 Singleton 单例模式 (Python 实现详解)
- selenium_java
- python---之suplot里面的twinx()函数
- C语言摇骰子比大小,三个骰子出点规律|玩3个骰子猜大小必赢技巧
- 18对个人财富的窥视——对一款手机木马的解读及分析
- JAVA Spring Security对接QQ快速登录(web应用)
- 计算机中的ip地址是什么 ???
- ISA禁止skype网络电话的原理
- 工作中需要将多张CAD图纸共同转换成DWF格式如何操作?
- yjk的波库在哪里_弹性时程分析——YJK盈建科软件操作.pdf
- springboot2.x集成ureport2.2.9搭建报表引擎
- NFT批量图片合成制作
- [区间DP 思路题] BZOJ 4350 括号序列再战猪猪侠
热门文章
- FZU 2282 错排
- atoi 和itoa用法
- 【报告分享】2021年春节档电影报告-艺恩(附下载)
- 在ECLIPSE导入项目后提示::具有不受限制的类路径容器:“JRE 系统库 [JVM 1.6.0]”
- 让工作效率提升200%的9款外贸工具
- 蓝牙技术|蓝牙的四种安全模式
- 【已解决】The pom for XXX is missing,no dependency information available
- muduo学习简单介绍
- 微软服务器安全补丁,微软发布10个安全补丁 修复26个漏洞
- 索尼wifi控制相机开发总结(五):Sony相机Wifi控制流程