简介
Drawees
- DraweeView,View层,默认实现类 SimpleDraweeView;
- DraweeHierarchy,Model层,描述绘制对象数据,持有树状结构的多层Drawable,为了实现UI的可变性,比传统的View嵌套实现更加轻量级,默认实现类GenericDraweeHierarchy;
- DraweeController,负责处理交互并展现到DrweeView,默认实现类PipelineDraweeController;
- DraweeControllerBuilder 建造者模式,DraweeController有太多可配置参数;
Drawees 负责图片的呈现,它由三个元素组成,有点像MVC模式。Fresco的MVC约束:
ImagePipeLine
- Bitmap处理方式的抽象,各种缓存策略等等。
- ImagePipeline就是一个加载图片的组件,如果有可能,甚至可以拿出来让其他图片加载框架用。比如Volley的图片加载组件。
ImagePipeLine工作流程:
ImagePipeLine工作流实现:
时序图
使用
官方用法
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);
其实最后都是一个套路给View一个Controller,想当于View层换了一个Controller
public void setImageURI(Uri uri, @Nullable Object callerContext) {
DraweeController controller = mSimpleDraweeControllerBuilder
.setCallerContext(callerContext)
.setUri(uri)
.setOldController(getController())
.build();
setController(controller);
}