Picasso是Square公司开源的一个Android图形缓存库, 可以实现图片加载(本地和网络)和缓存功能。

地址:http://square.github.io/picasso/

jar包下载: Picasso.jar

Paicsso可以实现图片的很多功能,drawable/mipmap下图片加载,SD卡图片加载,网络图片加载(可自己设置是否缓存),图片裁剪等。

Picasso实现了图片的异步加载,并解决了Android中加载图片时常见的一些问题,它有以下特点:

  1. 在Adapter中取消了不在视图范围内的ImageView的资源加载,因为可能会产生图片错位;
  2. 使用复杂的图片转换技术降低内存的使用
  3. 自带内存和硬盘的二级缓存机制

效果如图:

 

1:加载本地图片

 int resourceId = R.mipmap.ic_launcher;
Picasso.with(this).load(resourceId).into(iv1);

2:加载SD卡图片

File file = new File(path2);
Picasso.with(this).load(file).into(iv2);

3:普通加载网络图片

Picasso.with(this).load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg").into(iv3);

4:加载图片并裁剪

 Picasso.with( this).load("url").resize(99,99).centerInside().into(iv4);

5:初始化图片和错误时的图片

 Picasso.with(this).load("url")
.placeholder(R.mipmap.ic_launcher)//默认显示图片
.error(R.mipmap.ic_launcher)//加载时出现错误显示的图片
.into(iv5);

6:加载图片过大要放弃缓存( Picasso默认会使用设备的15%的内存作为内存图片缓存,且现有的api无法清空内存缓存。我们可以在查看大图时放弃使用内存缓存,图片从网络下载完成后会缓存到磁盘中,加载会从磁盘中加载,这样可以加速内存的回收 )

Picasso.with(this).load("url")//查看大图放弃缓存,加速内存的回收
.memoryPolicy(NO_CACHE, NO_STORE)
.into(iv6);

7:  计算出最佳的大小及最佳的图片质量来进行图片展示 (  减少内存 )

Picasso.with(this).load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg")
.fit()
.into(img8);

8:自定义图片控件加载

   /**
* 重写ImageView的onDetachedFromWindow方法,在它从屏幕中消失时回调,去掉drawable引用,能加快内存的回收。
* priority()设置图片加载的优先级
* 如果一个屏幕上顶部图片较大,而底部图片较小,因为Picasso是异步加载,所以小图会先加载出来,但是对于用户来说,更希望看到的是上面的图片先加载,
* 底部的图片后加载,Picasso支持设置优先级,分为HIGH, MEDIUM, 和 LOW,所有的加载默认优先级为MEDIUM;
*/
Picasso.with(this).load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg")
.priority(HIGH)
.into(recyclerImageView);

9:列表加载(.tag的使用)

 Picasso.with(context).load("url"])
.tag("RecyclerView") //参数为 Object
.into(viewHolder.imageView);

补充:

//因为图片的旋转都是相对(0,0)进行操作,所以如果我们想自定义相对于某个点,也是可以的,只需要调用
//.rotate(float degrees, float pivotX, float pivotY) Picasso.with(context).load("url").rotate(90f) //旋转90度
.into(imageViewSimpleRotate);

新进程中查看大图

列表页的内存已经非常稳定,但是查看大图时,大图往往占用了20+m内存,加上现有进程中的内存,非常容易oom,在新进程中打开Activity成为比较取巧的避免oom的方式。

<activity android:name=".DetailActivity" android:process=":picture"/>

添加程序所需要的依赖:

compile 'com.squareup.picasso:picasso:2.5.2'

AndroidManifest.xml添加权限

    <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" />

源码点击下载

Android之网络图片加载的5种模式

Android之网络图片框架UniversalImageLoader和结合LruCache缓存图片

Android之Fresco(facebook的强大Android图片加载的框架)

Android之Glide(非常好用的图片加载框架)

android-------非常好的图片加载框架和缓存库(Picasso)的更多相关文章

  1. Android中常见的图片加载框架

    图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...

  2. Android 三大图片加载框架的对比——ImageLoader,Picasso,Glide

    一.ImageLaoder介绍 << Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹ass ...

  3. 图片加载框架之Glide和Picasso

    Glide介绍 Glide是一个加载图片的库,作者是bumptech,它是在泰国举行的google 开发者论坛上google为我们介绍的,这个库被广泛的运用在google的开源项目中. Glide是一 ...

  4. Android之图片加载框架Fresco基本使用(一)

    PS:Fresco这个框架出的有一阵子了,也是现在非常火的一款图片加载框架.听说内部实现的挺牛逼的,虽然自己还没研究原理.不过先学了一下基本的功能,感受了一下这个框架的强大之处.本篇只说一下在xml中 ...

  5. Android 框架练成 教你打造高效的图片加载框架(转)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41874561,本文出自:[张鸿洋的博客] 1.概述 优秀的图片加载框架不要太多, ...

  6. 一起写一个Android图片加载框架

    本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做 ...

  7. Android项目框架之图片加载框架的选择

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 从Android爆发以后,自定义的控件如EditTextWithDelete.ActionBar.P ...

  8. Android 框架修炼-自己开发高效异步图片加载框架

    一.概述 目前为止,第三方的图片加载框架挺多的,比如UIL , Volley Imageloader等等.但是最好能知道实现原理,所以下面就来看看设计并开发一个加载网络.本地的图片框架. 总所周知,图 ...

  9. Android 图片加载框架Glide4.0源码完全解析(二)

    写在之前 上一篇博文写的是Android 图片加载框架Glide4.0源码完全解析(一),主要分析了Glide4.0源码中的with方法和load方法,原本打算是一起发布的,但是由于into方法复杂性 ...

随机推荐

  1. JavaCSV之写CSV文件

    与JavaCSV读CSV文件相对应,JavaCSV也可以用来写数据到CSV文件中. 1.准备工作 (1)第三方包库下载地址:https://sourceforge.net/projects/javac ...

  2. K-均值聚类(K-means)算法

    https://www.cnblogs.com/ybjourney/p/4714870.html 最近在看<机器学习实战>这本书,因为自己本身很想深入的了解机器学习算法,加之想学pytho ...

  3. Linux自动化部署尝试

    Linux自动化部署尝试   最近做一个项目临近测试,购买的是阿里云的服务器,每次部署都是手动打包war,然后上传到服务器,然后修改配置文件,不仅繁琐,而且费时,就思索着找一个一键式的部署方式,今天终 ...

  4. Day23 ajax

    AJAX AJAX概述 1 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步Javascript和XML".即使用Ja ...

  5. AOP切点表达式

    Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  execu ...

  6. ubuntu配置tomcat和jdk

    1.安装tomcat此处以tomcat8为例. 先到tomcat官网:http://tomcat.apache.org下载相应的tar.gz的安装包 放到ubuntu系统的指定位置(自己指定)解压. ...

  7. 第1章 1.6计算机网络概述--OSI参考模型

    ISO七层模式:国际标准组织对互联网通信规则进行的定义. 7.应用层:所有能产生网络流量的程序,如:QQ. 6.表示层:传输前对数据进行进行处理,是一种数据处理的规则,如:加密.压缩.传输二进制(图片 ...

  8. Kconfig文件说明

    Kconfig的格式 下面截取/drivers/net下的Kconfig文件中的部分内容: # Network device configuration menuconfig NETDEVICES d ...

  9. log4j2动态修改日志级别及拓展性使用

    一.供参考的完整日志配置 <?xml version="1.0" encoding="UTF-8"?> <!-- 配置LoggerConfig ...

  10. Java基础反射(二)

    原文地址http://blog.csdn.net/sinat_38259539/article/details/71799078 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Cla ...