Android Fresco框架的简单使用

2019-04-16  本文已影响0人  风二叽

        之前做过好几次加载图片的部分,因为没去研究,每次加载图片都只是用下面方法简单处理下

简单的加载图片方法

但是这样是万万不可取的,小图片还好,要是这个bitmap很大的话,很容易出现OOM,而且还有不具备缓存设计跟无法加载gif图等等缺点。于是乎,后面就接触到了Fresco,下面就看看怎么简单的上手这个框架。

        Fresco是Facebook提供的用于Android应用中的开源图片加载库,它能够从网络,本地存储和本地资源中加载图片,具备缓存设计,拥有较快的加载速度,能够加载gif图,非常使用的一个框架。

1.配置网络权限

<uses-permission android:name="android.permission.INTERNET"/>

2.在build.gradle中添加依赖

implementation 'com.facebook.fresco:animated-base-support: 0.14.1' // 在 API < 14 上的机器支持 WebP 时添加

implementation 'com.facebook.fresco:fresco:0.14.1'

implementation 'com.facebook.fresco:animated-webp:0.14.1' //支持 WebP动图时添加

implementation 'com.facebook.fresco:webpsupport:0.14.1'//支持 WebP静态图时添加

implementation 'com.facebook.fresco:animated-gif:0.14.1' // 支持 GIF 动图时添加

3.初始化Fresco类

在application中调用Fresco.initialize即可完成初始化,然后再AndroidManifest.xml 中指定 Application 类

初始化Fresco类 指定 Application 

4.在xml布局文件中加入命名空间

加入命名空间

5.加入SimpleDraweeView

加入SimpleDraweeView

6.设置DraweeController跟DraweeHierarchy

Uri uri = Uri.parse(“xxx”);

PipelineDraweeControllerBuilder sdcb = Fresco.newDraweeControllerBuilder();

sdcb.setUri(uri);

//加载失败之后,点击提示重新加载的图片资源重新加载

sdcb.setTapToRetryEnabled(true);

//图片下载完之后自动播放动画

sdcb.setAutoPlayAnimations(true);

//在指定一个新的controller的时候,使用setOldController,这可节省不必要的内存分配。

sdcb.setOldController(simpleDraweeView.getController());

ControllerListener listener =new BaseControllerListener(){

@Override

    public void onSubmit(String id, Object callerContext) {

//提交请求之前调用的方法

        Log.d("", "onSubmit: " + id);

    }

@Override

    public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {

// 所有图片都加载成功时触发的方法

        Log.d("", "onFinalImageSet: " + id);

        Toast.makeText(mContext,"加载图片成功",Toast.LENGTH_SHORT).show();

    }

@Override

    public void onIntermediateImageSet(String id, ImageInfo imageInfo) {

//当中间图片下载成功的时候触发,用于多图请求

    }

@Override

    public void onIntermediateImageFailed(String id, Throwable throwable) {

//当中间图片下载失败的时候触发,用于多图请求

    }

@Override

    public void onFailure(String id, Throwable throwable) {

// 加载图片失败时回调的方法

        Log.d("加载图片失败", "onFailure: " + id);

        Toast.makeText(mContext,"加载图片失败",Toast.LENGTH_SHORT).show();

    }

@Override

    public void onRelease(String id) {

//释放图片资源时加载的方法

        Log.d("", "onRelease: " + id);

    }

};

sdcb.setControllerListener(listener);

DraweeController controller = sdcb.build();

GenericDraweeHierarchyBuilder builder =

new GenericDraweeHierarchyBuilder(getResources());

GenericDraweeHierarchy hierarchy = builder

.setFadeDuration(300)

.setProgressBarImage(new ProgressBarDrawable())//进度展示

        .build();

simpleDraweeView.setHierarchy(hierarchy);

simpleDraweeView.setController(controller);

这样,我们就完成了Fresco最简单的加载图片使用,后续会讲到详细属性设置跟配置Image pipeline缓存。

上一篇下一篇

猜你喜欢

热点阅读