Fresco使用总结

 以前比较流行的图像加载是imageloader,我个人没有太多的使用经验,恰逢新项目希望做一点其他框架的尝试,于是我们选择使用Fresco, 选择的初衷比较简单:1.希望尝试新事物 2.facebook出品,必属精品 。
      就这样我们毅然决然的投入Fresco的怀抱。
        Fresco资料不是特别多,不翻墙看facebook官方文档的情况下比较详细的是liaohuqiu童鞋翻译的一个文档,里面介绍了Fresco的特性以及基本使用方法,入门看这个可以快速的对Fresco有一个大致的了解。
        传送门:http://www.fresco-cn.org/
        有条件的建议翻墙看官方文档,github源码等,因为Fresco版本还在迭代,功能还在完善,每天github上的issue也比较多,所以中文文档无法保证实时更新以及涵盖一些细节问题的解决方式。
        关于一些具体如何接入Fresco和基本的使用我就不赘述了,有需要的童鞋可以通过以上的传送门去了解,唯一的建议是使用gradle导入,因为导入jar会有一些编译问题。
        SimpleDraweeView的设置相对复杂,我们在项目中的使用基本是在xml中指定SimpleDraweeView的布局及大小,具体设置都通过在代码中使用一个helper类来完成SimpleDraweeView的初始化
        接下来就是我在实际使用过程中的一些心得体会了,这是你在看文档时不会知道的一些细节。

1.如何复用hierarchy
首先一般情况下不建议复用hierarchy。这里说的不要复用hierarchy是指在做一些基础性封装的时候不要复用hierarchy给多个SimpleDraweeView,当然如果这些view是item中一模一样的控件则可以考虑使用一个全局的hierarchy来节省生成hierarchy的时间(官方文档强调这是个耗时过程)。

2.不要使用wrapcontent
官方文档有说明Fresco是不支持wrapcontent属性的,这样会极大限制应用场景。Fresco的考虑是如果开始大小不确定,那么在加载完成前占位图会不知道怎么显示。对于一些特定的场景,我采用的方案是监听下载,在加载前根据获取到的图片的大小来决定draweeview的高宽。虽然这样可以解决动态改变视图大小的问题,但是会有图片加载前后视图大小跳变的问题。所以确定自己应用加载图片的场景需求以后再决定要不要使用Fresco。
参考代码:

​​
3.巧用imagepipeline获取图像
imagepipeline是Fresco底层图片加载的实现,正常使用下我们不会直接使用到imagepipeline。在实际项目中我们遇到了这样的场景,我们在webview中需要加载网络图片,又希望通过Fresco去管理图片缓存。Fresco没有比较方便的api去脱离控件获取网络图片,加载的控制与draweeview强绑定(view显示后才去加载)。那么我们需要解决如何在没有draweeview的情况下去获取网络图片并拿到本地的图片缓存路径。在查看部分源码的情况下我们直接使用imagepipeline来获取图片,通过request监听下载,最后通过cachekey获取图片本地地址。
参考代码:


4.如何监听gif
在监听图片下载中,较通常使用的回调方式是 BaseControllerListener < ImageInfo >,如果是gif的话,回调会没有反应,这个时候需要使用更底层的回调比如数据流的回调可以监听到。
5.图像拉伸
一般情况我们遇到拉伸都可以直接使用fitXY来拉伸图像,这个与ImageView是相同的。但是如果是圆形dreweeview这样做会有bug。需要使用center_crop模式才能正确显示。
目前遇到的问题就这些,时间仓促没有进行更深入的了解,如果有错误希望不吝指正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值