项目git地址: https://github.com/facebook/fresco
Fresco是facebook推出的一款强大的图片加载的框架;
主要有Image Pipeline和Drawees两大模块;
Image Pipeline模块:
Fresco 中设计有一个叫做 Image
Pipeline 的模块。 它负责从网络, 从本地文件系统, 本地资源加载图
片。 为了最大限度节省空间和CPU时间,
它含有3级缓存设计( 2级内存, 1级磁盘)
。
Drawees模块:
Fresco 中设计有一个叫做 Drawees 模块,
它会在图片加载完成前显示占位图, 加载成功后自动替换为目标
图片。 当图片不再显示在屏幕上时, 它会及时地释放内存和空间占用。
Fresco特性
(1)内存管理
解压后的图片, 即Android中的Bitmap,
占用大量的内存。 大的内存占用势必引发更加频繁的GC。 在5.0以下, GC将会
显著地引发界面卡顿。
在5.0以下系统, Fresco将图片放到一个特别的内存区域。
当然, 在图片不显示的时候, 占用的内存会自动被释放。 这
会使得APP更加流畅,
减少因图片内存占用而引发的OOM。
(2)图片加载
Fresco的Image
Pipeline允许你用很多种方式来自定义图片加载过程, 比如:
为同一个图片指定不同的远程路径, 或者使用已经存在本地缓存中的图片
先显示一个低清晰度的图片, 等高清图下载完之后再显示高清图
加载完成回调通知
对于本地图, 如有EXIF缩略图,
在大图加载完成之前, 可先显示缩略图
缩放或者旋转图片
对已下载的图片再次处理
(3)图片绘制
Fresco 的 Drawees 设计,
带来一些有用的特性:
自定义居中焦点
圆角图, 当然圆圈也行
下载失败之后, 点击重现下载
自定义占位图, 自定义overlay, 或者进度条
指定用户按压时的overlay
(4)图片的渐进式呈现
渐进式的JPEG图片格式已经流行数年了,
渐进式图片格式先呈现大致的图片轮廓, 然后随着图片下载的继续, 呈现
逐渐清晰的图片, 这对于移动设备, 尤其是慢网络有极大的利好, 可带来更好的用户体验。
Android 本身的图片库不支持此格式, 但是Fresco支持。
使用时, 和往常一样, 仅仅需要提供一个图片的URI即可, 剩
下的事情, Fresco会处理。
(5)支持gif等动态图加载;
Fresco的使用: (1),gitHub下载依赖库或者jar包;Anroid
Studio可以通过compile方式加载:
compile 'com.facebook.fresco:fresco:0.8.1'
(2),添加网络权限;
<uses-permission android:name="android.permission.INTERNET"/>
(3),在Application中初始化Fresco; Fresco.initialize(this);
(3),layout布局文件中声明控件;
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image_view"
android:layout_width="300dp"
android:layout_height="300dp"
fresco:placeholderImage="@mipmap/ic_launcher"/> (4),加载网络图片
Uri uri
= Uri.parse("http://pic1.nipic.com/2008-09-08/200898163242920_2.jpg");
image_view.setImageURI(uri);
注: 加载本地图片把Url地址改成本地地址即可;
当然上面提到的SimpleDraweeView只是Drawee其中的控件,
没有什么很特别的需求使用它就够了, 下面贴一下它里面的一
些属性:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image_view"
android:layout_width="300dp"
android:layout_height="300dp"
fresco:fadeDuration="300"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@color/wait_color"
fresco:placeholderImageScaleType="fitCenter"
fresco:failureImage="@drawable/error"
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@drawable/retrying"
fresco:retryImageScaleType="centerCrop"
fresco:progressBarImage="@drawable/progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="1000"
fresco:backgroundImage="@color/blue"
fresco:overlayImage="@drawable/watermark"
fresco:pressedStateOverlayImage="@color/red"
fresco:roundAsCircle="false"
fresco:roundedCornerRadius="1dp"
fresco:roundTopLeft="true"
fresco:roundTopRight="false"
fresco:roundBottomLeft="false"
fresco:roundBottomRight="true"
fresco:roundWithOverlayColor="@color/corner_color"
fresco:roundingBorderWidth="2dp"
fresco:roundingBorderColor="@color/border_color"
/>
简单介绍一下上面的属性:
placeholderImage就是所谓的展位图啦,
在图片没有加载出来之前你看到的就是它
failureIamge看到名字就知道是什么了, 图片加载失败时显示的图片就是它了
retryImage图片加载失败时显示, 提示用户点击重新加载, 重复加载4次还是没有加载出来的时候才会显示failureImage的图片
progressBarImage进度条图片
backgroundImage背景图片, 这里的背景图片首先被绘制
overlayImage设置叠加图, 在xml中只能设置一张叠加图片,
如果需要多张图片的话, 需要在java代码中设置哦
pressedStateOverlayImage |