Fresco(0图片框架)

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)在app
<uses-permissiplication中初始化Fresco(记得在清单文件里配置application)
Fresco.initialize(this);

(3)配置网络权限
(4)在xml布局文件中,加入命名空间


(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);
//带进度条的图片
//所要加载图片的网址
Uri uri = Uri.parse(“http://t2.hddhhn.com/uploads/tu/201810/9999/ddf74b51de.jpg”);
//创建Builder对象,一般创建出参数对象
GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
//创建参数对象,设置其样式为进度条
GenericDraweeHierarchy hierarchy = builder.setProgressBarImage(new ProgressBarDrawable()).build();
//将参数对象设置给图片控件
img.setHierarchy(hierarchy);
//控件加载图片,参数:网络图片的网址.
img.setImageURI(uri);
//圆形加圆角
switch (v.getId()) {
case R.id.btn_cencle:
//加载图片的网址
uri = Uri.parse(“http://img4q.duitang.com/uploads/item/201304/27/20130427043538_wAfHC.jpeg”);
//builder对象用一个即可,在这里创建出成员变量
builder = new GenericDraweeHierarchyBuilder(getResources());
// 设置圆形图片
// 设置形状对象,形状为圆形
parames = RoundingParams.asCircle();
//创建设置参数,设置一个形状,把形状对象塞入
GenericDraweeHierarchy roundness = builder.setRoundingParams(parames).build();
//将参数对象设置给图片控件
img.setHierarchy(roundness);
//控件加载图片
img.setImageURI(uri);
break;
case R.id.btn_yuanjiao:
//加载图片的网址
uri = Uri.parse(“http://t2.hddhhn.com/uploads/tu/201811/9999/d6a0113547.jpg”);
//builder对象用一个即可,在这里创建出成员变量
builder = new GenericDraweeHierarchyBuilder(getResources());
//设置边角的弧度,使其为圆角
parames = RoundingParams.fromCornersRadius(50f);

            //这里的代码和设置圆形图片这一块代码是一种的,唯一不同就是对parames的设置.
            GenericDraweeHierarchy circularBead = builder.setRoundingParams(parames).build();
            img.setHierarchy(circularBead);
            // 加载图片
            img.setImageURI(uri);
            break;
    }
    6.渐进式展示图片(采用MVC的设计模式)

// 获取图片URL

Uri uri = Uri.parse(“https://note.wiz.cn/wizas/a/users/avatar/36e04b40-cc54-41c5-995a-7aad33f45dd9”);

// 加载质量配置,为了实现节省CPU,随着图片下载的进行,下载完的扫描序列如下: 1, 4, 5, 10

/* 首次调用getNextScanNumberToDecode返回为2, 因为初始时,解码的扫描数为0。

那么1将不会解码,下载完成4个扫描时,解码一次。下个解码为扫描数为6(5不会解码,10才会解码)*/

ProgressiveJpegConfig jpegConfig = new ProgressiveJpegConfig() {

@Override

public int getNextScanNumberToDecode(int scanNumber) {

return scanNumber + 2;

}

@Override

public QualityInfo getQualityInfo(int scanNumber) {

boolean isGoodEnough = (scanNumber >= 5);

return ImmutableQualityInfo.of(scanNumber, isGoodEnough, false);

}

};

//上面的和下面一行是固定代码.使用使复制粘贴即可

ImagePipelineConfig.newBuilder(this).setProgressiveJpegConfig(jpegConfig).build();

// 创建 ImageRequest 对象.

ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)//设置URL

.setProgressiveRenderingEnabled(true)//打开渐进 渲染

.build();

DraweeController draweeController = Fresco.newDraweeControllerBuilder()

//必须要设置ImageRequest对象,里面包含了图片的网址.

.setImageRequest(request)

//开启用户点击重新加载图片的功能

.setTapToRetryEnabled(true)

//会复用以前的对象,可以节省内存.

.setOldController(sdv_fresco_jpeg.getController())

.build();

// 1设置加载的控制

sdv_fresco_jpeg.setController(draweeController);

7.GIF动画图片

//请求GIF动画,采用MVC的设计模式(注意加载GIF动画还要添加依赖)

/* 支持 GIF 动图,需要添加:compile ‘com.facebook.fresco:animated-gif:0.14.1’ */

//GIF动画网址,加载需要一段时间

Uri uri = Uri.parse(“http://www.sznews.com/humor/attachement/gif/site3/20140902/4487fcd7fc66156f51db5d.gif”);

DraweeController controller = Fresco.newDraweeControllerBuilder()

.setUri(uri)//设置GIF网址

.setAutoPlayAnimations(false)//是否自动播放动画,false为不播放

.setOldController(sdv_fresco_gif.getController())//内存优化

.build();

sdv_fresco_gif.setController(controller);

// 动画停止

//拿到动画对象

Animatable animatableStop = sdv_fresco_gif.getController().getAnimatable();

//进行非空及是否动画在播放判断

if(animatableStop != null && animatableStop.isRunning()) {

//动画在播放,停止动画播放

animatableStop.stop();

}

// 动画开始

//拿到动画对象

Animatable animatableStart = sdv_fresco_gif.getController().getAnimatable();

//进行非空及是否动画在播放判断

if(animatableStart != null && !animatableStart.isRunning()) {

//动画停止播放,播放动画

animatableStart.start();

}

8.多图请求及图片复用

// 先显示低分辨率的图,然后是高分辨率的图,MVC的设计模式

// 同一个图片,不同分辨率的两个URL地址

Uri lowUri = Uri.parse(“http://img1.gamedog.cn/2012/03/11/19-120311133617-50.jpg”);

Uri highUri = Uri.parse(“http://img5.duitang.com/uploads/item/201312/03/20131203153823_Y4y8F.jpeg”);

// 控制加载图片

DraweeController controller = Fresco.newDraweeControllerBuilder()

//一开始加载一个低分辨率的URL

.setLowResImageRequest(ImageRequest.fromUri(lowUri))

//然后加载一个高分辨率的URL,你真正要加载的图片

.setImageRequest(ImageRequest.fromUri(highUri))

.build();

// 加载图片

sdv_fresco_multi.setController(controller);

// 本地缩略图预览

// 图片地址,参数1.File对象, 从手机手机SD卡里加载一张图片

Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory() +"/shuaige.jpg"));

// 加载图片的请求

ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)

//开启缩略图预览模式

.setLocalThumbnailPreviewsEnabled(true)

.build();

// 控制图片的加载

DraweeController preview = Fresco.newDraweeControllerBuilder()

.setImageRequest(request)

.build();

// 加载图片

sdv_fresco_multi.setController(preview);
//布局注意
加xmlns:fresco=“http://schemas.android.com/apk/res-auto
{<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/img"
android:layout_width=“400dp”
android:layout_height=“600dp”
fresco:placeholderImage="@drawable/p3"
android:layout_gravity=“center_horizontal”
/>}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值