Lottie是Aribnb发布的开源库,可以渲染AE In Android,iOS和RN代码的动画。
Lottie的功能及其强度只需要使用AE来设计动画和用Bodymovin出口。然后,我们只需要一条简单的代码线即可获得非常复杂的动画效果。
LottieAnimationView从ImageView继承,并通过当前绘制画布在接口上显示的画布。这里是两个关键类别:Lottiecockosition负责分析JSON描述文件,将JSON内容转换为JAVA数据对象;Lottledrawable负责绘制,绘制由Lottiecosposition转换为可绘制为视图的数据对象。该顺序如下:
核心类别:参考文档https://airbnb.io/lottie/#/android
如何加载动画资源:
如何在XML中使用(不再重复)
设置动画播放进度lottie_imageasssetsfolder设置动画图片资源文件地址代码以使用lottie
默认情况下,所有Lottie动画都将LRU缓存算法用于缓存。从RAW或ASSETS文件夹加载的所有动画将默认情况下创建缓存键。其他API需要设置缓存键。如果需要并行触发多个动画请求,则将随后的请求添加到现有任务中,因此只会对其进行解析。
lottie具有一些全局配置选项。默认情况下不需要它,但可以用于:
为了将其设置,在应用程序应用过程中的某个地方,包括:
注意:Systrace是Android随附的性能分析工具。有关详细信息,您可以查看文档
Android Systrace系列文章
循环lottie可以通过setRepetmode和setRepeatCount设置圆形播放模式,或将其设置为XML
您还可以通过呼叫,包括框架(从0.0到1.0)或标记名称(在After Effects中指定),在动画中,呼叫或包括框架(在After Effects中指定)来循环一定段落。
洛蒂(Lottie)适应洛蒂(Lottie),以在设备上的DPS中添加到DPS中的所有px值,以显示具有相同大小的设备上的所有内容。这意味着Lottie本身具有其自己的适应功能。与其在After Effects中制作1920x1080的动画,不如在After Effects中制作411x731px,这与当今大多数手机的DP屏幕大小相对应。
但是,如果您的动画大小不合适,您有两个选择:
缩放/下降
您可以在程序运行时动态更新Lottie属性,可用于多种目的:
了解AE(后效果),以了解如何更改Lottie中的动画属性。首先,您应该了解动画属性如何存储在lottie中。动画属性存储在模仿after效果的分层结构的数据树中。对象具有字符串名称,其内容可以是图像,形状层,填充,边缘或任何绘制的内容。east in after效果具有名称。Lottie可以使用这些对象的名称和属性来找到它们。
Lottie Json文件的属性含义
动态修改属性方法:如果您需要在运行时动态修改属性,则需要以下三个点:
KeypathKeypath用于定位一组内容或要更新。按字符串列表指定了Keypath,该列表与原始动画中的After Extivest的内容层次结构相对应。
键盘可以包含特定名称或传递内容的字符:
Keypath ResolutionKeypath可以存储其分析内容的内部引用。当您创建一个新的键盘对象时,它将被解析。LottiedRawabableand lottieanimationview具有resolvekeypath()方法,该方法接受键盘并返回带有Zero或更多键或更多解析的键的列表键盘,每个内部分析都作为内容片段。如果您不知道,可以用来发现您的动画结构。为此,在开发环境中,分析了新的键盘(“”)并记录返回的列表。但是,您不应该单独使用它并为ValueCallback使用它,因为它将应用于动画中的每个内容片段。如果您分析键盘并希望稍后再添加值,请使用此方法返回的键盘,因为他们将在内部进行分析无需再次执行树即可再次找到内容。
LottiePropertylottieProperty是可以设置的属性的枚举。它们对应于After Effects中的动画值,并且在其上列出了可用属性
运行时可以修改以下属性:
posentransform_rotationTransform_scaletransform_scale
stroke_width
polystar_outer_rdiustransform_start_opacitytransform_rotationTransform_rotation
polystar_outer_roundednesstransform_end_opacity
time_remap
polystar_inner_radius
ValueCallbackValueCallback是每次渲染动画时都调用的内容。
ValueCallback类动态修改属性用法:
注意:键盘构造函数中的字符串对应于Lottie JSON文件中不同级别的NM字段。通过NM字段,Lottie可以将属性动态需要的位置定位,但是当Lottie资源复杂时,很难找到相应的字段。
LottieanimationView从AppCompatimageView继承。Lottie动画的核心是Lottledraw的。
以下是Lottie工作的简短过程:
Lottie First:通过LottieanimationView()的SetAnimation()方法的JSON分析()
输入反合方法:
然后分析字节流含量
分析JSON FIELD
Lottie步骤2:LotttieanimationView通过对Lottiedrawer生成的Lotttiecosition对象的分析
Lottiedrawable构造Lottiecosposition对象作为构图层
Coptionslayer继承了基本器,并且在结构过程中它遍历所有层,并将其转换为Baselayer对象。
在这里,通过Baselayer的Formodel方法,抽象了Baselayer的类型
以下是不同类型的lottie
在这一点
Lottie步骤3:播放LottieanimationView ViaAnimation的Playanimation方法,可以看出,LottledRawable的Playanimation方法将在内部称为,然后触发了LottievaLueAnimator的Playanimation方法。LottevevalueAnimatortrignd.lottevevalueanimator实际上也是lottiemator,所以Lottie也是驱动的,因此也可以驱动。属性动画。
特别是在LottiedRawable中,您可以看到,LottievalueAnimator称为UpdateListener之后,它将刷新构图层的进度。
当您输入SetProgress时,您可以看到Coptionslayer横穿所有层层,并一一调用其SetProgress方法。
输入BASELAYER的SetProgress方法将发现所有baseKeyFrameAimation的SetProgress方法都将被调用,并且Invalidateself()方法将在BaseLayer中返回。
回调无效()方法后,LottledRawable将回电
绘制输入组合层的方法
实际上,这构成了一个周期。随着动画动画的开发,Lottledrawable将继续绘制,以便Lottie Animation运行,流程图如下:
流程图
洛蒂跳跃问题经常在开发过程中发生。然后,我们必须首先了解为什么Lottie跳跃框架?
输入LottievalueAnimator的Playanimation方法,您可以看到
继续触摸葡萄藤,找到FrameCallback的Doframe方法:
了解Lottie框架跳跃的机制,因此如何优化?