博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android-------非常好的图片加载框架和缓存库(Picasso)
阅读量:6713 次
发布时间:2019-06-25

本文共 2380 字,大约阅读时间需要 7 分钟。

hot3.png

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

地址:

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("https://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("https://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("https://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);

 

添加程序所需要的依赖:

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

AndroidManifest.xml添加权限

 

新进程中查看大图

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

 

  其他网络图片加载方式,请看

       

       

       

 

 

 

转载于:https://my.oschina.net/zhangqie/blog/860127

你可能感兴趣的文章
spring+springMVC+mybatis的整合 part1
查看>>
[Spark]Spark Streaming 指南四 输入DStreams和Receivers
查看>>
Android Recyclerview 实现画廊功能
查看>>
Integer 与 Long 数字类型的比较:Java与Kotlin的细节不同
查看>>
官宣!vue.ant.design 低调上线
查看>>
云用户生态发展论坛暨第三届中国云计算用户大会北京站盛大召开
查看>>
Emulator 29.0.3 Canary 发布,Android 模拟器
查看>>
总结一波安卓组件化开源方案
查看>>
oss-server 简单对象存储系统
查看>>
使用fastcgi_finish_request提高页面响应速度
查看>>
javascript成神之路(4):深入理解this关键字,是的就是this
查看>>
Flink1.4 Fault Tolerance源码解析-1
查看>>
Spring Cloud配置中心
查看>>
React 路由状态管理总结
查看>>
JAVA 几种引用类型学习
查看>>
Android WindowManager悬浮窗:不需要申请权限实现悬浮
查看>>
偶遇到客户的奇葩需求
查看>>
禅道 11.3 版本发布,主要完善细节,修复 bug
查看>>
无人机新用途,可精确识别危险海洋生物并向游泳者发出预警
查看>>
计算与推断思维 六、可视化
查看>>