最新Lottie 运行原理分析(含时序图)

Lottie 已经有好多人分析了,但是我看到源码差不多都是刚出来的时候的,最近又看了一遍源码,参考:https://www.jianshu.com/p/97d5daa37a15

一、时序图

如果这个图看不清,可以直接去这个链接查看:https://www.processon.com/view/link/6114c6245653bb6d0a7878aa
在这里插入图片描述

二、笔记

分析的时候记的笔记有点混乱,有时间再整理

先从 LottieAnimationView 方法的一层层的调用看起:

LottieAnimationView.
	setAnimationFromJson(String, String)
    setAnimation(InputStream stream, @Nullable String cacheKey)
    setCompositionTask(LottieCompositionFactory.fromJsonInputStream(stream, cacheKey));
		
LottieCompositionFactory.
	fromJsonInputStream(stream, cacheKey)
	
//...然后一路找下去


//最终会走到 LottieCompositionFactory.fromJsonReaderSyncInternal 方法
  private static LottieResult<LottieComposition> fromJsonReaderSyncInternal(
      com.airbnb.lottie.parser.moshi.JsonReader reader, @Nullable String cacheKey, boolean close) {
   
      // 从json文件加载一个composition
      LottieComposition composition = LottieCompositionMoshiParser.parse(reader);
      // 判断是否进行缓存
      if (cacheKey != null) {
   
        LottieCompositionCache.getInstance().put(cacheKey, composition);
      }
      return new LottieResult<>(composition);
   	  // ...省略了部分代码
  }

// LottieComposition 可以看作是一个包含所有图层动画信息的对象
// 具体的parse方法就是根据每层的names给composition对象设置属性
// 使用LottieCompositionMoshiParser.parse(JsonReader reader)方法
switch (reader.selectName(NAMES)) {
   
        case {
   0..10}
// 看下NAMES对应的json中的键名,就是前面分析出的json文件格式
JsonReader.Options NAMES = JsonReader.Options.of(
    "w", // 0
    "h", 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值