Fresco初探

简介

Drawees

  1. DraweeView,View层,默认实现类 SimpleDraweeView;
  2. DraweeHierarchy,Model层,描述绘制对象数据,持有树状结构的多层Drawable,为了实现UI的可变性,比传统的View嵌套实现更加轻量级,默认实现类GenericDraweeHierarchy;
  3. DraweeController,负责处理交互并展现到DrweeView,默认实现类PipelineDraweeController;
  4. 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);
}    

参考