Skip to content
szysky edited this page May 8, 2017 · 2 revisions

使用场景

  • 类似微信, QQ的群组头像
  • 对头像的自定义矩形, 圆角矩形, 圆形, 描边等
  • 支持url集合设置, 可以自动下载显示

整体流程

UML类图

有何特点

  1. 首先通过策略模式将多张图片的排列规则, 和图片的装饰裁剪效果通过两个接口隔离出去. 可以让使用者动态设置不同的展示策略或者传入自定义策略.
    • QQLayoutManagerqq的环形群头像
    • WeChatLayoutManager微信的九宫格头像
  2. 加入二级缓存机制, 对操作的图片进行内存磁盘缓存. 并对最近使用的图片时所采取的大小进行缓存. 在获取的时候优先获取对应大小图片. 失败再获取内存原尺寸图片. 再失败就获取磁盘原尺寸图片. 再失败就网络加载.
  3. IDrawingStrategy的实现类实现了许多常用的图形展示. 供类库调用. 外部只需要设置对应参数即可. 也可以自定义比如心形的装饰规则.

使用的设计模式

  • 单例模式 ImageLoader缓存控制类为全局存在.
  • 策略模式 图片的具体布局由一个接口来实现. 这个接口可以动态设置(存在内置实现). 类似于RecycleView使用的布局管理器.
  • 拷贝模式ILayoutManager接口中的计算每个子元素的布局信息的类结构实现Cloneable.
  • 享元模式 对多张图片请求的实体类, 为了高效复用利用静态链表结构实现复用. 类似Message.obtain(), Message.recycle()的实现.
  • 工厂方法 生成一个类定义几个生成不同形状的方法. 提供给具体的绘图策略使用.

其他

  • 图片地址的有效匹配(正则). https?://.*?.(jpg|png|bmp|jpeg|gif)
  • 图片控件的默认图片优先级比全局默认图片
  • 使用自定义注解+@IntDef实现枚举的功能.
  • 多张图片时使用**混合模式setXfermode()**实现圆形头像等.
  • 单张图片时使用着色器BitmapShader来实现圆形头像等.
  • 实现自定义xml属性, 并对padding, content_wrap等属性进行兼容.
Clone this wiki locally