美文网首页
Android Fresco框架的简单使用

Android Fresco框架的简单使用

作者: 风二叽 | 来源:发表于2019-04-16 16:06 被阅读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缓存。

    相关文章

      网友评论

          本文标题:Android Fresco框架的简单使用

          本文链接:https://www.haomeiwen.com/subject/vimbwqtx.html