一、关于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图的话还是用他吧。
第一次写文章,自己都感觉很乱。欢迎大家指导。
网友评论