注:还有许多其他功能,可查看官方文档。
1.在application中初始化:Fresco.initialize(this);
2.使用SimpleDraweeView代替ImageView,同时Fresco不支持wrap_content属性,必须有明确的宽和高
在使用SimpleDraweeView时,最好一个imageview的属性都不要在使用
3.SimpleDraweeView的属性设置:
在布局文件中设置:
fresco:placeholderImage="@mipmap/icon_placeholder"//设置占位图
fresco:placeholderImageScaleType="fitCenter"//设置占位图片缩放类型
fresco:actualImageScaleType="focusCrop"//实际图片缩放类型
fresco:progressBarImage="@mipmap/icon_progress_bar"//正在加载的图片
fresco:progressBarImageScaleType="centerInside"//正在加载图片的缩放类型
fresco:progressBarAutoRotateInterval="5000"//正在加载图的旋转间隔,直到实际图加载完毕
fresco:failureImage="@mipmap/icon_failure"//加载失败显示的图片
fresco:failureImageScaleType="centerInside"//失败显示的图片的类型
fresco:retryImage="@mipmap/icon_retry"//失败重试的图片------和加载失败的图片一起设置,当失败一定次数后不显示重试图片,显示加载失败图片
fresco:retryImageScaleType="centerCrop"//失败重试的图片的缩放类型
fresco:fadeDuration="5000"//淡进淡出动画时间,毫秒
fresco:backgroundImage="@android:color/holo_orange_light"//背景图
//叠加图显示在最上面
fresco:pressedStateOverlayImage="@android:color/holo_green_dark"//按压下显示的叠加图
fresco:overlayImage="@android:color/black"//叠加图
//同时设置圆形和圆角时,显示为圆形图
fresco:roundAsCircle="true"//是否是圆形图
fresco:roundedCornerRadius="30dp"//设置圆角半径
//分别设置4个角是否是圆形图
fresco:roundTopLeft="true"
fresco:roundTopRight=""
fresco:roundBottomLeft=""
fresco:roundBottomRight=""
//给圆形图加边框
fresco:roundingBorderWidth="10dp"//设置边框宽度
fresco:roundingBorderColor="@android:color/black"//设置边框颜色
fresco:roundWithOverlayColor="@android:color/darker_gray"//圆形和圆角图的叠加颜色,就是在方形控件,图片空白区域显示的颜色
注意:不能直接设置实际需要显示的图片,但是可以设置占位图,作为图片显示
使用失败重试时,需要设置DraweeController :
//创建DraweeController
DraweeController controller = Fresco.newDraweeControllerBuilder()
//加载的图片URI地址
.setUri(imageUri)
//设置点击重试是否开启
.setTapToRetryEnabled(true)
//设置旧的Controller,可以减少不必要的浪费
.setOldController(simpleDraweeView.getController())
//构建
.build();
//设置DraweeController
simpleDraweeView.setController(controller);
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 控件纵横比
缩放类型—ScaleType:
类型 描述
center 居中,无缩放
centerCrop 保持宽高比缩小或放大,使得两边都大于或等于显示边界。居中显示。
focusCrop 同centerCrop, 但居中点不是中点,而是指定的某个点
centerInside 使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片。
fitCenter 保持宽高比,缩小或者放大,使得图片完全显示在显示边界内。居中显示
fitStart 同上。但不居中,和显示边界左上对齐
fitEnd 同fitCenter, 但不居中,和显示边界右下对齐
fitXY 不保存宽高比,填充满显示边界
none 如要使用tile mode显示, 需要设置为none
推荐使用:focusCrop 类型,可以在代码中通过mSimpleDraweeView.getHierarchy();然后setActualImageFocusPoint设置中心点
4.在代码中可以设置的:
需要在代码中修改占位图等东西需要使用mSimpleDraweeView.getHierarchy()来修改。
显示Gif
a.设置Gif图片自动播放
Uri uri;
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(true)
. // 其他设置(如果有的话)
.build();
mSimpleDraweeView.setController(controller);
b.手动控制动画图播放
5.混淆
a.在gradle中添加:
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-fresco.pro'
}
}
}
b.在混淆文件中添加
Keep our interfaces so they can be used by other ProGuard rules.
See http://sourceforge.net/p/proguard/bugs/466/
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.common.internal.DoNotStrip *;
}
Keep native methods
-keepclassmembers class * {
native
}
-dontwarn okio.**
-dontwarn com.squareup.okhttp.**
-dontwarn okhttp3.**
-dontwarn javax.annotation.**
-dontwarn com.android.volley.toolbox.**
Works around a bug in the animated GIF module which will be fixed in 0.12.0
-keep class com.facebook.imagepipeline.animated.factory.AnimatedFactoryImpl {
public AnimatedFactoryImpl(com.facebook.imagepipeline.bitmaps.PlatformBitmapFactory,com.facebook.imagepipeline.core.ExecutorSupplier);
}