在当前众多图片加载框架当中,Fresco可谓名声赫赫,以其优异的内存优化性能名声遐迩。Fresco支持常规的图片展示,同时也支持Gif图片的展示,一个控件满足多种需求,下面我们来介绍一下Fresco的使用。
1、配置环境
使用Fresco需要先在build.gradle中导入依赖:
// Fresco所需依赖
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'
AndroidManifest.xml文件中配置网络权限:
<uses-permission android:name="android.permission.INTERNET" />
2.初始化Fresco
在项目的Application中初始化Fresco:
public class AppApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 初始化Fresco
Fresco.initialize(this);
}
3.控件SimpleDraweeView的使用
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/id_aty_sdv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
fresco:actualImageScaleType="focusCrop"
fresco:fadeDuration="3000"
fresco:failureImage="@mipmap/ic_launcher"
fresco:placeholderImage="@mipmap/ic_launcher"
fresco:progressBarImage="@mipmap/ic_launcher"
fresco:retryImage="@mipmap/ic_launcher"
fresco:failureImageScaleType="centerInside"
fresco:placeholderImageScaleType="fitCenter"
fresco:progressBarAutoRotateInterval="500"
fresco:progressBarImageScaleType="centerInside"
fresco:retryImageScaleType="centerCrop"
fresco:roundAsCircle="false"
fresco:viewAspectRatio="1.5" />
常用属性说明如下:
fresco:actualImageScaleType:实际加载的图片的伸缩样式
fresco:backgroundImage:底层图片资源
fresco:fadeDuration:进度条和占位符图片逐渐消失、加载的图片逐渐显示的时间间隔
fresco:failureImage:加载失败时显示的图片资源
fresco:failureImageScaleType:加载失败时加载的图片的伸缩样式
fresco:overlayImage:在显示的图片表层覆盖一张图片的图片资源
fresco:placeholderImage:占位符图片资源
fresco:placeholderImageScaleType:占位符图片的伸缩样式
fresco:progressBarAutoRotateInterval:进度条图片转动周期
fresco:progressBarImage:进度条图片资源
fresco:progressBarImageScaleType:进度条图片的伸缩样式
fresco:retryImage:提示重新加载的图片资源
fresco:retryImageScaleType:提示重新加载的图片的伸缩样式
fresco:roundAsCircle:将图片剪切成圆形
fresco:viewAspectRatio:图片宽高比
注意事项:
SimpleDraweeView控件的宽高不能设置为wrap_content,只能是match_parent、具体值或使用viewAspectRatio属性设置宽高比。
4.代码部分用法
基本用法:
SimpleDraweeView sdv = (SimpleDraweeView) findViewById(R.id.id_aty_sdv);
sdv.setImageURI(图片的url);
Java代码设置属性:
// 代码设置SimpleDraweeView的属性(会覆盖XML设置的所有属性,即在XML中有在这里没有的属性都会失效)
// 注意:一个GenericDraweeHierarchy是不能被多个SimpleDraweeView共用的
GenericDraweeHierarchy hierarchy = new GenericDraweeHierarchyBuilder(getResources())
.setFadeDuration(3000)
.setPlaceholderImage(R.mipmap.ic_launcher)
.setPlaceholderImageScaleType(ScalingUtils.ScaleType.FIT_XY)
.setProgressBarImage(new ProgressBarDrawable()) // 显示进度条(Fresco自带的进度条)
.build();
// 设置图片圆角
RoundingParams roundingParams = new RoundingParams();
roundingParams.setRoundAsCircle(false); // 不将图片剪切成圆形
roundingParams.setCornersRadius(200);
hierarchy.setRoundingParams(roundingParams);
// 为SimpleDraweeView设置属性
sdv.setHierarchy(hierarchy);
加载本地gif图片:
Uri uri = Uri.parse("android.resource://"
+ getActivity().getApplicationContext().getPackageName()
+ "/"
+ R.drawable.img_gif);
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.build();
PipelineDraweeController controller =
(PipelineDraweeController) Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(draweeView.getController())
.setAutoPlayAnimations(true)
.build();
draweeView.setController(controller);