美文网首页
Fresco使用中遇到的问题

Fresco使用中遇到的问题

作者: b79a056c2b14 | 来源:发表于2017-06-13 17:23 被阅读551次

    一、关于Fresco

    这个就不作说明如果你的项目图片附上项目地址和中午文档说明

    中文文档地址:https://www.fresco-cn.org/  (文档应该很久未更新了,注意版本引用)

    项目地址:https://github.com/facebook/

    二、使用

    1、引入

    compile'com.facebook.fresco:fresco:1.3.0'

    // 支持 GIF 动图,需要添加

    compile'com.facebook.fresco:animated-gif:1.3.0'

    另附一个非常好的大图查看组件地址:https://github.com/Piasy/BigImageViewer

    compile'com.github.piasy:FrescoImageLoader:1.2.9' 

    注:若引用了此大图控件 初始化方式则为:BigImageViewer.initialize(FrescoImageLoader.with(this));

    2、使用

    一般的使用中文文档上都有写,不再多说,现在说说我使用过程中遇到的问题:

    1、列表中图片重复加载问题

    解决方案:使用tag标志,控件加载图片成功后设置标签,加载图片的时候判断标签是否相等,相等则不再加载。

    ControllerListener baseControllerListener =newBaseControllerListener() {

    @Override

    public voidonFinalImageSet(String id,@NullableImageInfo mageInfo,@NullableAnimatable animatable) {

    super.onFinalImageSet(id, imageInfo, animatable);

    simpleDraweeView.setTag(R.string.sense_tag_key,url);

    }

    };

    2、图片过大导致卡顿问题

    解决方案:setResizeOptions

    ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url)).setResizeOptions(newResizeOptions(DisplayUtils.dip2px(context, width), DisplayUtils.dip2px(context, height))).build();//此处宽高 是项目中图片想要缩减到的宽高

    DraweeController placeHolderDraweeController = Fresco.newDraweeControllerBuilder()

    .setImageRequest(request)

    .setTapToRetryEnabled(true)//设置在加载失败后,能否重试

    .setOldController(simpleDraweeView.getController())

    .setControllerListener(baseControllerListener)

    .build();

    simpleDraweeView.setController(placeHolderDraweeController);

    3、自定义的图片加载进度动画问题

    Fresco的加载进度有setProgressBarImage就是蓝色的矩形条可以自定义,我们项目要用到如上图的效果,setProgressBarImage并不支持gif,所以要用到animation-list 帧动画。

    解决方案:

    GenericDraweeHierarchyBuilder builder =newGenericDraweeHierarchyBuilder(context.getResources());

    AnimationDrawable drawable = (AnimationDrawable) context.getResources().getDrawable(R.drawable.loading_animation); 

    GenericDraweeHierarchy hierarchy = builder.setPlaceholderImage(drawable).setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER).build();

    simpleDraweeView.setHierarchy(hierarchy);

    drawable.start();

    4、gif图片的暂停和播放

    Animatable animatable = simpleDraweeView.getController().getAnimatable();

    animatable.start();//开始

    animatable.stop();//停止

    有个问题一直不知是否有解决方案,gif restart的时候能不能从暂停的地方开始播放,如果有方案求告知。

    总结:

    fresco 、picasso、glide 三种都用过,各有优缺点,

    fresco引入后apk会增大1m-2m之间,且很容易出现65536问题.但是如果图片很多并且还有gif图的话还是用他吧。

    第一次写文章,自己都感觉很乱。欢迎大家指导。

    相关文章

      网友评论

          本文标题:Fresco使用中遇到的问题

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