依赖:
compile 'com.facebook.fresco:fresco:0.12.0'
支持 GIF 动图,需要添加
compile 'com.facebook.fresco:animated-gif:0.12.0'
1、Fresco是什么
Fresco 是一个强大的图片加载组件。
Fresco 中设计有一个叫做*image pipeline*的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。
Fresco 中设计有一个叫做*Drawees*模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。
Fresco 支持 Android2.3(API level 9) 及其以上系统。
支持的图片格式:PNG,GIF,WebP, JPEG
2、三大核心部分:
DraweeView
继承于 View, 负责图片的显示。
一般情况下,使用 SimpleDraweeView 即可
DraweeHierarchy
DraweeHierarchy 用于组织和维护最终绘制和呈现的 Drawable 对象,相当于MVC中的M。
DraweeController
1.1三级缓存
1. Bitmap缓存
Bitmap缓存存储Bitmap对象,这些Bitmap对象可以立刻用来显示或者用于后处理
在5.0以下系统,Bitmap缓存位于ashmem,这样Bitmap对象的创建和释放将不会引发GC,更少的GC会使你的APP运行得更加流畅。
5.0及其以上系统,相比之下,内存管理有了很大改进,所以Bitmap缓存直接位于Java的heap上。
当应用在后台运行时,该内存会被清空。
2. 未解码图片的内存缓存
这个缓存存储的是原始压缩格式的图片。从该缓存取到的图片在使用之前,需要先进行解码。
3. 磁盘缓存
和未解码的内存缓存相似,和磁盘缓存不一样,APP在后台时,内容是不会被清空的。即使关机也不会。用户可以随时用系统的设置菜单中进行清空缓存操作。
严格来说是四级缓存,还有一级是网络缓存
2、
Drawees 不支持 wrap_content 属性。如果使用也需要宽和高一个是固定值。然后使用属性宽高比:fresco:viewAspectRatio="1.33"
3、常用属性:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="20dp"
android:layout_height="20dp"
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" />
3、
使用代码:
GenericDraweeHierarchy hierarchy = new GenericDraweeHierarchyBuilder
(getResources())
//设置占位图及它的缩放类型
.setPlaceholderImage(ContextCompat.getDrawable(this,R.mipmap.icon_placeholder), ScalingUtils.ScaleType.FOCUS_CROP)
//设置正在加载图及其缩放类型
.setProgressBarImage(ContextCompat.getDrawable(this,R.mipmap.icon_progress_bar), ScalingUtils.ScaleType.FOCUS_CROP)
//设置失败图及其缩放类型
.setFailureImage(ContextCompat.getDrawable(this, R.mipmap.icon_failure),
ScalingUtils.ScaleType.FOCUS_CROP)
//设置重试图,它默认的缩放类型是CENTER_INSIDE
.setRetryImage(ContextCompat.getDrawable(this, R.mipmap.icon_retry))
//构建
.build();
//设置GenericDraweeHierarchy
sdv.setHierarchy(hierarchy);
//开始下载
sdv.setImageURI(imageUrl);
/构建Controller
DraweeController controller = Fresco.newDraweeControllerBuilder()
//设置点击重试是否开启
.setTapToRetryEnabled(true)
//构建
.build();
//设置Controller
sdv.setController(controller);
功能:设置渐进式
ImageRequest imageRequest =ImageRequestBuilder.newBuilderWithSource(Uri.parse(mJpegUrl))
.setProgressiveRenderingEnabled(true)
.build();
功能:设置圆角或者边框
RoundingParams roundingParams = new RoundingParams();
roundingParams.setBorderColor(ContextCompat.getColor(this,R.color.colorAccent));
roundingParams.setBorderWidth(20);
roundingParams.setCornersRadius(180);
genericDraweeHierarchy.setRoundingParams(roundingParams);
功能:Gif动画
.setAutoPlayAnimations(true) //自动播放
功能:下载进度
ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() { @Override public void onFinalImageSet() };
.setControllerListener(imageInfoBaseControllerListener)
注意:1、setHierarchy() 2、setImageURI () 3、setController()
顺序不能乱,不然出不来重试
2、就算我们设置了自动旋转属性,那么进度图也不可能旋转;只有进度图和自动旋转属性都在XML中声明出来,才可以让进度图旋转。
-----------------------------------------------------------------
缩放类型—ScaleType:
推荐使用:focusCrop 类型
类型
|
描述
|
center
|
居中,无缩放。
|
centerCrop
|
保持宽高比缩小或放大,使得两边都大于或等于显示边界,且宽或高契合显示边界。居中显示。
|
focusCrop
|
同centerCrop, 但居中点不是中点,而是指定的某个点。
|
centerInside
|
缩放图片使两边都在显示边界内,居中显示。和 fitCenter 不同,不会对图片进行放大。
如果图尺寸大于显示边界,则保持长宽比缩小图片。
|
fitCenter
|
保持宽高比,缩小或者放大,使得图片完全显示在显示边界内,且宽或高契合显示边界。居中显示。
|
fitStart
|
同上。但不居中,和显示边界左上对齐。
|
fitEnd
|
同fitCenter, 但不居中,和显示边界右下对齐。
|
fitXY
|
不保存宽高比,填充满显示边界。
|
none
|
如要使用tile mode显示, 需要设置为none
|
-----------------------------------------------------------------------------------
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
|
控件纵横比
|
webp介绍:
WebP文件格式和JPEG类似,也是通过牺牲图片质量来降低图片文件大小,但能在相同质量的情况下比JPEG文件尺寸小巧许多。目前的Chrome应用商店图片已全部转换为WebP格式。虽说WebP格式有各种优点,但支持甚少是最大的问题;
官方url:
https://www.fresco-cn.org/docs/index.html
url1:
http://blog.csdn.net/y1scp/article/details/49245535
url2:
http://blog.csdn.net/hongensq/article/details/52623376