1.Image Pipeline
Fresco 中设计有一个叫做 Image Pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级磁盘)。
2.Drawees
Fresco 中设计有一个叫做 Drawees 模块,它会在图片加载完成前显示占位图,加载成功后自动替换为目标图片。当图片不再显示在屏幕上时,它会及时地释放内存和空间占用。
特性
1、内存管理
解压后的图片,即Android中的Bitmap,占用大量的内存。大的内存占用势必引发更加频繁的GC。在5.0以下,GC将会显著地引发界面卡顿。
在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。
Fresco 在低端机器上表现一样出色,你再也不用因图片内存占用而思前想后。
2、图片加载
Fresco的Image Pipeline允许你用很多种方式来自定义图片加载过程,比如:
为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片
先显示一个低清晰度的图片,等高清图下载完之后再显示高清图
加载完成回调通知
对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图
缩放或者旋转图片
对已下载的图片再次处理
支持WebP解码,即使在早先对WebP支持不完善的Android系统上也能正常使用!
3、图片绘制
Fresco 的 Drawees 设计,带来一些有用的特性:
自定义居中焦点
圆角图,当然圆圈也行
下载失败之后,点击重现下载
自定义占位图,自定义overlay, 或者进度条
指定用户按压时的overlay
4、图片的渐进式呈现
渐进式的JPEG图片格式已经流行数年了,渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,呈现逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。
Android 本身的图片库不支持此格式,但是Fresco支持。使用时,和往常一样,仅仅需要提供一个图片的URI即可,剩下的事情,Fresco会处理。
5、动图加载
加载Gif图和WebP动图在任何一个Android开发者眼里看来都是一件非常头疼的事情。每一帧都是一张很大的Bitmap,每一个动画都有很多帧。Fresco让你没有这些烦恼,它处理好每一帧并管理好你的内存。
开始使用Fresco
1.在项目app目录下的build.gradle文件添加依赖:
compile 'com.facebook.fresco:fresco:0.9.0'
2.如果加载网络图片,要记得添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
3.初始化Fresco
最好写在全局的application中进行初始化,如果只是写个demo,可以在启动activity的setContentView()之前。
Fresco.initialize(this);
4.xml属性介绍
在布局中声明命名空间
xmlns:fresco="http://schemas.android.com/apk/res-auto"
注意:
①、一定要设置imageView控件的大小,因为Drawees不支持wrap_content属性
②加载圆角图片时,上下左右都为true时,四个属性可以省略不写
fresco:roundedCornerRadius="30dp"
fresco:roundTopRight="true"
fresco:roundTopLeft="true"
fresco:roundBottomRight="true"
fresco:roundBottomLeft="true"
③同时设置了圆形和圆角属性,图片只会以圆形的形式显示
fresco:roundAsCircle="true" //它会起作用
XML属性汇总
XML属性 | 意义 |
---|---|
fadeDuration | 淡入淡出动画持续时间(单位:毫秒ms) |
actualImageScaleType | 实际图像的缩放类型 |
placeholderImage | 占位图 |
placeholderImageScaleType | 占位图的缩放类型 |
progressBarImage | 进度图 |
progressBarImageScaleType | 进度图的缩放类型 |
progressBarAutoRotateInterval | 进度图自动旋转间隔时间(单位:毫秒ms) |
failureImage | 失败图 |
failureImageScaleType | 失败图的缩放类型 |
retryImage | 重试图 |
retryImageScaleType | 重试图的缩放类型 |
backgroundImage | 背景图 |
overlayImage | 叠加图 |
pressedStateOverlayImage | 按压状态下所显示的叠加图 |
roundAsCircle | 设置为圆形图 |
roundedCornerRadius | 圆角半径 |
roundTopLeft | 左上角是否为圆角 |
roundTopRight | 右上角是否为圆角 |
roundBottomLeft | 左下角是否为圆角 |
roundBottomRight | 右下角是否为圆角 |
roundingBorderWidth | 圆形或者圆角图边框的宽度 |
roundingBorderColor | 圆形或者圆角图边框的颜色 |
roundWithOverlayColor | 圆形或者圆角图底下的叠加颜色(只能设置颜色) |
viewAspectRatio | 控件纵横比 |
缩放类型汇总
类型 | 描述 |
---|---|
center | 居中,无缩放 |
centerCrop | 保持宽高比缩小或放大,使得两边都大于或等于显示边界。居中显示。 |
focusCrop | 同centerCrop, 但居中点不是中点,而是指定的某个点 |
centerInside | 使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片。 |
fitCenter | 保持宽高比,缩小或者放大,使得图片完全显示在显示边界内。居中显示 |
fitStart | 同上。但不居中,和显示边界左上对齐 |
fitEnd | 同fitCenter, 但不居中,和显示边界右下对齐 |
fitXY | 不保存宽高比,填充满显示边界 |
none | 如要使用tile mode显示, 需要设置为none |
参考文章
Fresco中文说明:http://www.fresco-cn.org/
http://blog.csdn.net/y1scp/article/details/49245535