Fresco使用
1.简介
图片加载组件,可以加载网页上,手机存储,本地资源的图片,有二级缓存机制。在安卓4.x版本及以下,采用的是将图片存到手机一块特殊的内存区域,从而提高速度。
开源地址 https://github.com/facebook/fresco
2.基本使用
####(1)引进依赖
// 一般依赖:
compile ‘com.facebook.fresco:fresco:0.14.1’
可选依赖
// 如果需要支持gif,再添加:
compile ‘com.facebook.fresco:animated-gif:0.12.0’
如果想引进最新版本的依赖,可以如下图操作:
I.进入源码页面,点击Branch Master,出来的页面点击tag,就像这个图片一样,最上面的就是最新版本了;
II.或者去README.md文件,给出的一般是最新的版本;
III.再或者直接在版本号后面加一个+,直接下载最新版本,这样
implementation ‘com.facebook.fresco:fresco:1.10.0+’,但一般不用,因为某些最新版本的库可能和原有版本使用不一样,然后别人用的时候直接下最新版本的库就会出错。
[![1541473103553.png](https://i.loli.net/2018/11/06/5be1036f447a9.png)](https://i.loli.net/2018/11/06/5be1036f447a9.png)
(2)初始化
建议在App启动就初始化,所以建议写在Application#onCreate()
中,`Application在整个程序的周期内,Activity只是一个页面的周期
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
可选高级初始化
配置网络层为OkHttp,以及配置存储路径为SD卡 https://blog.csdn.net/yw59792649/article/details/78921025
(3)创建布局
用 SimpleDraweeView来实现传统的ImageView的效果,SimpleDraweeView是ImageView的子类,不过我们要注意Fresco
不支持wrap_content
,而是要用match_parent或者手动指定宽高,如果想使用wrap_content需要配合viewAspectRatio属性来使用。
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
fresco:placeholderImage="@drawable/my_drawable"
fresco:placeholderImageScaleType=“fitXY”
fresco:viewAspectRatio=“1”
/>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/simpleDraweeView"
android:layout_width="100dp"
android:layout_height="100dp" />
####(4)主代码配置
//创建将要下载的图片的URI
Uri imageUri=Uri.parse("http://b335.photo.store.qq.com/psb?/V10eyEEK3Xf6rE
/dn1GxGnLYID1lNQQVtkoFau0M20YE5Kagr5ueenkttQ!/b/dA2GscdMHwAA&bo=gAJVAwAAAAAFAPc!&rf=viewer_4");
//创建SimpleDraweeView对象
SimpleDraweeView simpleDraweeView = (SimpleDraweeView) findViewById(R.id.simpleDraweeView);
//开始下载
simpleDraweeView.setImageURI(imageUri);
//创建DraweeController
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(imageUri)//重试之后要加载的图片URI地址
.setTapToRetryEnabled(true)//设置点击重试是否开启
.setOldController(simpleDraweeView.getController())//设置旧的Controller
.build();//构建
//设置DraweeController
simpleDraweeView.setController(controller);
DraweeController就是设置一些图片加载过程中的一些操作。这样一个简单的Fresco显示图片就成功了
3.其他技能
变圆形再设置边框
在布局文件里的控件上方设置部分引进这个,也可以在用到的时候直接Alt+Enter键
xmlns:fresco="http://schemas.android.com/apk/res-auto"
可以设置这个属性
fresco:roundAsCircle="true"//是否切割为圆形
fresco:roundingBorderWidth="2dp"//边框宽度
fresco:roundingBorderColor="@color/colorAccent"//边框填充颜色
其他效果都可以用一些设置属性方式进行改变,参考
https://blog.csdn.net/xuyueqing1225/article/details/79842292
4.主流图片加载框架对比
Picasso,Glide,Fresco 对比分析
Picasso性能要低于另外两个,不支持Gif
Glide 操作简单,轻巧
Fresco 比较大,使用复杂,性能强大,对内存OOM处理比较好
根据业务需求在Glide和Fresco中选择,大项目选Fresco,参见:
https://juejin.im/entry/5928e9212f301e0057d6bb93