Fresco介绍
项目github地址:https://github.com/facebook/fresco
Fresco中文API:http://fresco-cn.org/docs/index.html
Fresco是目前最强大的图片加载组件之一 。
- Fresco中设计有一个叫做image pipeline的模块。它负责从网络,从本地文件系统,本地资源加载图片。 为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。
Fresco中设计有一个叫做Drawees模块, 方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。
Fresco支持Android2.3(API level 9)及其以上系统。
特点-内存管理
- 一个没有未压缩的图片,即Android中的Bitmap,占用大量的内存。大的内存占用势必引发更加频繁的GC。 在5.0以下,GC将会显著地引发界面卡顿。
在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。 这会使得APP更加流畅,减少因图片内存占用而引发的OOM。
特点-渐进式呈现图片
- 渐进式的JPEG图片格式已经流行数年了,渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续, 呈现逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。
特点-Gif图和WebP格式
- 支持加载Gif图,支持WebP格式。
特点-图像的呈现
- 1、自定义居中焦点(对人脸等图片显示非常有帮助)。
- 2、圆角图,当然圆圈也行。
- 3、下载失败之后,点击重现下载。
- 4、自定义占位图,自定义overlay, 或者进度条。
- 5、指定用户按压时的overlay。
特点-图像的加载
- 1、为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片。
- 2、先显示一个低解析度的图片,等高清图下载完之后再显示高清图。
- 3、加载完成回调通知。
- 4、对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图。
- 5、缩放或者旋转图片。
- 6、处理已下载的图片。
- 7、WebP支持。
Fresc是Facebook出品的图片加载框架
依赖
compile 'com.facebook.fresco:fresco:0.12.0'
// 在 API < 14 上的机器支持 WebP 时,需要添加 compile 'com.facebook.fresco:animated-base-support:0.12.0' // 支持 GIF 动图,需要添加 compile 'com.facebook.fresco:animated-gif:0.12.0' // 支持 WebP (静态图+动图),需要添加 compile 'com.facebook.fresco:animated-webp:0.12.0' compile 'com.facebook.fresco:webpsupport:0.12.0' // 仅支持 WebP 静态图,需要添加 compile 'com.facebook.fresco:webpsupport:0.12.0'
第二步初始化
初始化
[MyApplication.java]public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();Fresco.initialize(this);}}
或者
在oncreaterview前Fresco.initialize(this);
第三步权限
<uses-permission android:name="android.permission.INTERNET" />
第四
布局加入命名空间
xmlns:fresco="http://schemas.android.com/apk/res-auto"
使用控件
<com.facebook.drawee.view.SimpleDraweeView android:id="@+id/my_image_view" android:layout_width="130dp" android:layout_height="130dp" fresco:placeholderImage="@drawable/my_drawable" />
最后加载图
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/logo.png");SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);draweeView.setImageURI(uri);
- 显示占位图直到加载完成;
- 下载图片;
- 缓存图片;
- 图片不再显示时,从内存中移除;