Android 图片处理之 Fresco
一、关于 Fresco
github: https://github.com/facebook/fresco
API: http://www.fresco-cn.org/javadoc/reference/packages.html
Fresco 是一个强大的图片加载组件。
Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。
Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。
Fresco 支持 Android2.3(API level 9) 及其以上系统。
二、特性
图片的渐进式呈现
渐进式的JPEG图片格式已经流行数年了,渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,呈现逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。
Android 本身的图片库不支持此格式,但是Fresco支持。使用时,和往常一样,仅仅需要提供一个图片的URI即可,剩下的事情,Fresco会处理。
Gif图和WebP格式
是的,支持加载Gif图,支持WebP格式。
图像的呈现
Fresco 的 Drawees 设计,带来一些有用的特性:
- 自定义居中焦点(对人脸等图片显示非常有帮助)
- 圆角图,当然圆圈也行。
- 下载失败之后,点击重现下载
- 自定义占位图,自定义overlay, 或者进度条
- 指定用户按压时的overlay
图像的加载
Fresco 的 image pipeline 设计,允许用户在多方面控制图片的加载:
- 为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片
- 先显示一个低解析度的图片,等高清图下载完之后再显示高清图
- 加载完成回调通知
- 对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图
- 缩放或者旋转图片
- 处理已下载的图片
- WebP 支持
三、例子
1.使用Fresco加载网络图片
第一步:需要引入库
allprojects {
repositories {
jcenter()
mavenCentral()
}
}
Fresco.initialize(instance); 接着:Fresco是通过控件来实现它内部的优化缓存处理的,我们可以使用它提供的SimpleDraweeView来完成
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="50dp"
android:layout_height="50dp"
fresco:roundAsCircle="true"
fresco:roundedCornerRadius="180dp"
fresco:actualImageScaleType="focusCrop"
android:layout_centerVertical="true" />
上面引入了自定义属性,只需要在xml根部局中添加 “自定义命名空间即可”, 当然AS是支持快捷键一键生成的
第四步:就是显示网络图片了:
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);
剩下的,Fresco会替你完成:
- 显示占位图直到加载完成;
- 下载图片;
- 缓存图片;
- 图片不再显示时,从内存中移除;
等等等等。
上面就是Fresco最简单的用法了
四、其他一些介绍
Fresco是不支持 wrap_content属性的,如果布局中非要用,需在java代码中指定setAspectRatio(1.5f); 比例 fresco:fadeDuration="300" //持续时间
fresco:actualImageScaleType="focusCrop"//设置图片缩放属性,通常使用focusCrop,该属性值会通过算法把人头像放在中间
fresco:placeholderImage="指定一个默认图片"//下载图片之前的默认占位
fresco:failureImage="@drawable/error" //下载失败的默认图片 功能太多不再一一赘述。。。。
参考官方文档:http://www.fresco-cn.org/docs/index.html#_
最新文章
- DevExpress XtraPivotGrid 交叉表 重复显示问题
- runtime学习笔记
- Effective C++ -----条款08: 别让异常逃离析构函数
- 判断CAD图纸版本
- PHP微信登錄(網頁授權)之後的獲取用戶的信息
- ZOJ 1008 Gnome Tetravex(DFS)
- [ECNU 1624] 求交集多边形面积
- 将JDBC ResultSet结果集变成List
- Factorials 阶乘
- Html5用Canvas制作画图板
- linux 中环境变量配置错误导致部分命令不能使用包括vi
- Android学习笔记-App初始启动界面实现
- SublimeText 修改文件扩展名的默认语法高亮
- 解决TCPDF中文乱码,PHP
- zabbix3.0.4添加对指定进程的监控
- MVC中视图界面设置Checkbox
- 拖拽TreeViewItem到OCX控件
- python 爬虫之为什么使用opener对象以及为什么要创建全局默认的opener对象
- python自动化之连接数据库
- JVM内存模型以及垃圾回收