1.Fresco的环境搭建
(1)在项目的build.grade文件里添加依赖(注意:因为Fresco进行了包的拆分,用到哪个功能就添加对应的依赖,可以减少APP的体积)
dependencies {
//Fresco,无论使用哪个模块的功能,都必须要添加的基础依赖
compile 'com.facebook.fresco:fresco:0.14.1'
//下面的依赖根据需求,用到哪个模块,就导入对应的依赖即可.
// 仅支持 WebP 静态图,需要添加
compile 'com.facebook.fresco:webpsupport:0.14.1'
// 支持 GIF 动图,需要添加
compile 'com.facebook.fresco:animated-gif:0.14.1'
// 支持 WebP 静态图及 WebP 动图,需要添加
compile 'com.facebook.fresco:animated-webp:0.14.1'
compile 'com.facebook.fresco:webpsupport:0.14.1'
// 在 API < 14 上的机器支持 WebP 时,需要添加
compile 'com.facebook.fresco:animated-base-support:0.14.1'
}
(2)在application中初始化Fresco(记得在清单文件里配置application)
Fresco.initialize(this);
(3)配置网络权限
<uses-permission android:name="android.permission.INTERNET"/>
(4)在xml布局文件中,加入命名空间
<!-- 其他元素-->
<LinearLayout
xmlns:fresco="http://schemas.android.com/apk/res-auto">
(5)在xml中引入SimpleDraweeView控件(fresco:placeholderImage="@drawable/my_drawable":默认占位图片)
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="130dp"
android:layout_height="130dp"
fresco:placeholderImage="@drawable/my_drawable"
/>
2.Fresco的基本使用
(1)在Java代码中开始加载图片
//加载网络图片的网址
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);
注意:如果项目中使用了OkHttp需要进行替换(因为Fresco底层网络用的是okhttp,不做修改会出现jar包冲突)
OkHttp2版本:compile "com.facebook.fresco:imagepipeline-okhttp:0.12.0+"
OkHttp3版本::compile "com.facebook.fresco:imagepipeline-okhttp3:0.12.0+"
3.根据URI的地址,带进度条加载一个网络图片
//所要加载图片的网址
Uri uri = Uri.parse("http://assets.kgc.cn/upload/openteacher/20160831/1472636067718985.jpg");
//创建Builder对象,一般创建出参数对象
GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
//创建参数对象,设置其样式为进度条
GenericDraweeHierarchy hierarchy = builder.setProgressBarImage(new ProgressBarDrawable()).build();
//将参数对象设置给图片控件
sdv_fresco_spimg.setHierarchy(hierarchy);
//控件加载图片,参数:网络图片的网址.
sdv_fresco_spimg.setImageURI(uri);
4.对图片进行不同的裁剪
创建出成员变量的GenericDraweeHierarchyBuilder
builder = new GenericDraweeHierarchyBuilder(getResources());
//根据点击事件,对图片执行不同的裁剪
@Override
public void onClick(View v){
switch (v.getId()) {
// 居中,无缩放
case R.id.bt_fresco_center:
// 设置描述
tv_fresco_explain.setText("居中,无缩放");
// 样式设置,使图片只显示中间的部分
GenericDraweeHierarchy CENTER= builder.setActualImageScaleType(ScalingUtils.ScaleType.CENTER).build();
// 显示图片
imageDisplay(CENTER);
break;
// 保持宽高比缩小或放大,使得两边都大于或等于显示边界(也就是裁剪成正方形)。以中间的点为图片中心
case R.id.bt_fresco_centercrop:
// 设置描述
tv_fresco_explain.setText("保持宽高比缩小或放大,使得两边都大于或等于显示边界。居中显示");
// 样式设置,使图片按比例缩小或放大,且裁剪成正方形.
GenericDraweeHierarchy CENTER_CROP =builder.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_CROP).build();
// 图片显示
imageDisplay(CENTER_CROP);
break;
// 同centerCrop, 但居中点不是中点,而是指定的某个点,这里设置为图片的左上角那点
case R.id.bt_fresco_focuscrop:
// 设置描述
tv_fresco_explain.setText("同centerCrop, 但居中点不是中点,而是指定的某个点,这里我设置为图片的左上角那点");
//指定中心点位置
PointF point = new PointF(0,0);
//根据指定的点设置为图片中心,使图片按比例缩小或放大,且裁剪成正方形.
GenericDraweeHierarchy FOCUS_CROP= builder.setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP)
.setActualImageFocusPoint(point).build();
// 图片显示
imageDisplay(FOCUS_CROP);
break;
//使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片
case R.id.bt_fresco_centerinside:
// 设置描述
tv_fresco_explain.setText("使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片");
// 样式设置,使图片按比例显示在控件内,
GenericDraweeHierarchy CENTER_INSIDE=builder.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE).build();
//