首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

音视频开发之旅(63) -Lottie 源码分析之动画与绘制

目录 动画和绘制流程 LayerView树 ShapeLayer分析 Lottie优劣以及rLottie、PAG介绍 资料 收获 上一篇我们学习分析了Lottiejson解析部分....buildCompositionLayer(); //触发notifyUpdate,进而触发个Layerprogress重新计算以及draw回调(当然此时进度为0,各种判断之后也不会触发...三、ShapeLayer 分析 之所以把ShapeLayer单独拎出来说,是因为他lottie动画中很重要,通过 ShapeLayer是一个通过矢量图形而不是bitmap来绘制图层子类。...Lottie存在mask、matters ,需要先saveLayer,再调用drawLayer返回。...六、资料 Lottie实现思路和源码分析 Lottie 动画原理剖析 揭秘Lottie动画优劣及原理 lottie-android 框架使用及源码解析 Lottie动画库 Android 端源码浅析

82720
您找到你想要的搜索结果了吗?
是的
没有找到

Lottie-页面动画100%硬核还原

它就是今天主角:Lottie Lottie简介 Lottie 是Airbnb开源一个 面向iOS、Android、React Native 动画库,能分析 AE 导出动画(需要用bodymovin...下面是Lottie提供官方效果图。类似下面这种一段动画播放,非常适合使用Lottie来做。 Lottie流程 我们先来看下整个流程简图。...设计师用AE把动画效果做出来,再用Bodymovin导出相应json文件给到前端,前端使用Lottie库就可以实现动画效果。功能简单且强大。...) data_ready(所有动画数据加载完成) DOMLoaded(元素已添加到DOM节点) destroy 可使用addEventListener监听事件 // 动画播放完成触发 anm.addEventListener...('complete', anmLoaded); // 当前循环播放完成触发 anm.addEventListener('loopComplete', anmComplete); // 播放一帧动画时候触发

1K40

lottie系列文章(二):lottie最佳实践

unmount时候,需要调用该方法 lottie-web常用事件 我们lottie-web中可能也需要监听一些事件,比如加载完动画json文件data_ready事件。...: * complete: 播放完成(循环播放下不会触发) * loopComplete: 当前循环下播放(循环播放/非循环播放)结束触发 * enterFrame: 每进入一帧就会触发,播放每一帧都会触发一次...* data_ready: 动画json文件加载完毕触发 * DOMLoaded: 动画相关dom已经被添加到html后触发 * destroy: 将在动画删除触发 lottie-web部分高阶用法...制作AE动画,将图层命名为#svgId格式,前端加载该动画后,相应图层id会被设置为svgId,可以通过dom方法获取该元素并做相应操作; 制作AE动画,将图层命名为.svgClass格式...,前端加载该动画后,相应图层class会被设置为svgClass,可以通过dom方法获取这些元素并做相应操作; 动画json文件制作及导出规范 使用该方案制作动画,有些动画效果lottie-web

5.1K31

lottie谁是lottie?

现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 theme: v-green 背景 项目中,loading 常用动画方案是 Gif 动画。...lottie实现动画效果: jcode lottie-web lottie-web 支持多种特性,提供复杂动画控制和监听功能。... unmount 时候,需要调用该方法 监听事件: 名称 描述 data_ready 加载完 json 动画 complete 播放完成(循环播放下不会触发) loopComplete 当前循环下播放...(循环播放/非循环播放)结束触发 enterFrame 每进入一帧就会触发,播放每一帧都会触发一次,stop 方法也会触发 segmentStart 每进入一帧就会触发,播放每一帧都会触发一次,stop...方法也会触发 DOMLoaded 动画相关 dom 已经被添加到 html 后触发 destroy 将在动画删除触发 Lottie 动画性能 对比 Lottie 和 Gif 动画,数据显示

32020

一个 Vue 页面的内存泄露分析

同时事件执行过程合适时机自动把事件给解绑了,上面是判断如果所有的图片都展示出来了那么就没必要监听scroll事件了直接解绑了。这样就能解决内存泄露问题了,能够触发自动垃圾回收。...这里我是第2种方式场景,检测单页面应用某个路由页面是否存在内存泄露。先打开首页,点到另一个页面,再点后退,接着点一下垃圾回收按钮: ? 触发垃圾回收,避免一些不必要干扰。...通过className等信息可以知道它就是那个要检查页面的DOM节点,在下面的Object窗口里面依次展开它结点,可以看到它最外面的结点是一个VueComponent实例: ?...它是一个用来放lottie动画DOM容器lottie对象里面仍有引用它: ?...这个是一个用lottieloading动画,当loading结束时候,我会手动调一下它stop api停止动画,并且把.animte-container给remove掉,但是为什么lottie还不肯放过它呢

3.9K30

React: Lottie 动画初体验和优化策略

简单来讲就是 UI 设计师用 AE 解析出 JSON 动画,前端工程师使用 JSON 文件 lottie-web 等框架下进行 svg (canvas/html) 渲染 2、看几个简单 DEMO...3、为什么选择 LOTTIE 动画,比较同样类型和选择 同样类型复杂动画实现方案现在有如下几个 png 序列帧: 优点:兼容性好,工程师可控,操作性强 缺点:它需要大量图片素材支持,动画播放占用内存较多...AnimationItem容器,把我们节点element和 animationData json数据进行初始化 2、 setData,setParams 给 animationData 设置基础值...,完全禁止动画 7、实践 1、2 可以大部分场景实现,这里只讨论上诉 3,4,5 可行性 7.3、虚拟 dom 借助了 react 虚拟 dom 特性, swiper 上实现了;具体原理可以看这篇文章...Observer API 会注册一个回调函数,每当被监视元素进入或者退出另外一个元素(或者 viewport ),或者两个元素相交部分大小发生变化时,该回调方法会被触发执行。

3.7K40

使用强大 AirBnb Lottie 让你 React APP 炫酷起来

当我们准备好使用它,我们可以通过选择Lottie JSON下载动画JSON文件: 不管你是如何创建React项目的,你都可以把它放在任何你喜欢文件夹里。...一旦安装了lottie-web,我们就可以将动画放置在任何JSX元素中,方法是给出一个指示,表明我们希望它驻留在某个选择器中。 最好方法是使用id属性,因为它应该只应用程序元素中使用一次。...loadAnimation来运行我们动画,通过给它传递一个对象。在这个对象上,我们需要提供第一件事是容器,也就是我们想要在其中运行动画DOM节点。...动画自动播放设置默认为true,这意味着动画会在加载自动播放。如果你想有条件地运行动画,你可以通过使用一个状态变量将它设置为true或false(如果你想只动画可见播放动画)。.../lottie_light"; 希望这篇文章能够帮助您启动并运行Lottie,当您在web应用程序中寻找一些特别的东西,可以将Lottie作为一个特性添加到您React项目中。

1.9K20

CSS中鼠标滑过图片放大效果

刚刚看了下感觉还不错,纯CSS实现,虽然开发主题CSS3用比较少。...其中包括: 包含多个.item元素.container元素容器 每个.item元素都包含一个包装在锚标记中图像 将.container转换为一个flex容器,该容器将行中项对齐 设置.item类...CSS3中鼠标滑过图片突出放大效果 悬停展开项目 我们下一步是让项目悬停展开。...因为我们设置了一个项目悬停可以放大150%,所以转换应该设置为25%。这是悬停项所占用额外空间一半。...由于通用同级组合器仅适用于位于给定选择器之后同级(没有“向后”),因此我们需要另一种方法。 一种方法是容器本身上添加其他悬停规则。这是计划: 悬停容器,请将该容器所有项目向左移动。

8.2K10

lottie系列文章(一):lottie介绍

作为一款K12青少年教育产品软件,动画对于吸引其用户注意力和提高用户体验有着重要作用。特别是目前开放了小学教育内容之后,动画能力丰富和完善更是迫在眉睫。...web侧,lottie-web库可以解析导出动画json文件,并将其以svg或者canvas方式将动画绘制到我们页面中。 ? 下面是lottie提供官方效果图。...,lottie-web也提供了一系列事件,例如: onComplete: 动画播放完成触发 onLoopComplete: 当前循环播放完成触发 onEnterFrame: 播放一帧动画时候触发 onSegmentStart...: 开始播放一个动画片段时候触发 总体而言,lottie-web目前提供了丰富方法和事件,基本可以满足对动画进行控制需求。...lottie原理简介 Adobe After Effects中,动画是由一个一个图层组成相应图层上面添加一些变换(例如:缩放、移动等),这变成为了动画。下面是一个AE图层截图: ?

4.4K32

Android Lottie 中秋月饼变明月动画特效

和尚在 Android 端进行动画处理主要用是 Android 自带三种动画形式,今天和尚简单尝试通过 Airbnb Lottie 展示一个中秋月饼变明月动画Lottie Lottie...集成依赖 build.gradle 中集成最新版本 Lottie 依赖并同步; api 'com.airbnb.android:lottie:4.1.0' 2....循环播放 & 动画监听 前两步设置完 setAnimation() 之后,播放完成就停止动画,若需要重复播放,可以通过 loop(true) 方式进行循环播放,但该方法 API 中不建议使用...,可以通过 setRepeatCount() 设置播放次数,或通过动画监听动画结束再次播放等; mView2.loop(true); mView1.setRepeatCount(5);...;其中 layers 也为图层信息;layers 中 ks 为动画主要信息; 和尚理解 Lottie 整体是利用属性动画控制进度,通过进度变更更改 layers 中触发 LottieAnimationView

1.1K10

Lottie : 让动画如此简单

现在使用各平台 native 代码实现一套复杂动画是一件很困难并且耗时事,我们需要为不同尺寸屏幕加载不同素材资源,还需要写大量难维护代码,而Lottie可以做到同一个动画文件不同平台上实现相同效果...布局文件中直接添加LottieLottieAnimationView控件,即可在界面显示React logo动画效果 <com.airbnb.lottie.LottieAnimationView.../* * Lottie内部有两个缓存map(强引用缓存,弱引用缓存),动画文件加载完成后会根据设置缓存策略缓存动画,方便下次使用。...bitmap动画加载到window被创建,被window删除回收。所以不宜在RecyclerView中使用包涵mattes或者mask动画,否则会引起bitmap抖动。...,内存和性能不够好;相对于属性动画展示大动画,帧率较低 2.优势 (1)开发效率高—代码实现简单,更换动画方便,易于调试和维护。

27.7K136

从设计师和开发角度使用 lottie

可以 iOS、Android 和 React Native 实时渲染 After Effects 动画,就像使用静态图片一样容易。上图即为 lottie logo。...如下图: image.png 官网宣传了3个特性: 灵活使用AE特性 随心所欲控制你动画 很小文件体积 个人认为 lottie 最大优势就是可以将设计师设计动图原原本本页面上展现出来,完美还原了动画精细度...本文主要从设计师视角和开发者视角讲述 lottie-web 原理和使用以及 lottie weex/rax 中使用。...只有必要才使用路径关键帧动画。...api 支持没有 airbnb 官方完整,投入生产环境还需要严格测试一下 vue-weex demo 使用@ali/rax-lottie rax demo 如下 小结 在我看来,追求更精细完美动画体验一直是设计师和前端开发使命

3.1K21

复杂帧动画之移动端video采坑实现

企鹅辅导品牌页中,我们需要实现一个动画如下: 页面滚动到动画区域,播放动画, 对应动画部分如下: 帧动画当前实现有以下几种方式: GIF 动画 大家比较熟悉图片格式 lottie(http:...//airbnb.io/lottie/) Airbnb 开源项目,通过解析 AE 动画为 json 数据,支持跨平台动画效果解决方案;lottie 辅导中已经有实际应用,使用过同学都表示对其实现效果和开发速度表示称赞和推荐...将动画导出 json 给到我们前端开发,使用这段 json 数据中,我们引入了 lottie-web 脚本来解析这段 json 数据渲染成为SVG / canvas 动画,效果如下图, 左图为用 lottie...实现,右图为我我们目标实现效果 可以看到实现还是存在着差异,颜色、数字倾斜度、虚线透视都没有达到预期,于是放弃lottie 使用,但这并不否定 lottie 实现其它动画优秀效果 APNG...video 自动播放,考虑一些浏览器限制必须通过用户交互才能使用,如果视屏是第一屏则有点难度,还是需要用户通过点击才能播放,如果不是第一屏则可通过 touch 事件来触发,毕竟用户下拉滚动还是会触发

2.3K10

【源码分析】Lottie 实现炫酷动画背后原理

Render After Effects animations natively on Android and iOS Lottie 是 airbnb 发布库,它可以将 AE 制作动画 Android...Lottie 适配原理 开始使用 Lottie 时候,我们团队设计动画跟设计图片一样路子,想设计2x,3x 多份资源进行适配。...但是,通过阅读源码发现其实 Lottie本身在 Android 平台已经做了适配工作,而且适配原理很简单,解析 ,从 读取宽高之后 会再乘以手机密度。...", compWidth, compHeight, screenWidth, screenHeight)); } 这里值得一提是,设计师设计动画要注意,需要设计是1X...,可以看到,setProgress 最后触发了每个 layer invalidateSelf,这都会让 lottieDrawable 重新绘制,然后重走一遍绘制流程,这样随着 animator 动画进行

1.9K11

动画菜鸡自我救赎之企鹅辅导品牌页开发总结

一般来说,品牌介绍页都是少不了各种动画。这里我列出了辅导品牌页三个主要动画,后面我会讲我实现 隧道动画: ? 页面滑动到隧道位置时候,会触发隧道动画自动播放。...当页面滑动到AI教学模块时候触发AI模块动画自动播放。可以看到有四部分动画:上面数字变化,下面的小男孩动画、轴动画以及文字动画。其中小男孩动画、轴动画已经文字动画需要保持一致。 2....但实际上,导出视频大小会比导出动图大小要小很多,后面实现小男孩动画时候我会讲到。...具体表现为,一些复杂动画下,会丢失一些倾斜度、渐变或者色彩不正确。 3. 品牌页动画实现 隧道动画: ?...右边tab是跟着隧道一起运动lottie可以监听进入每一帧事件,每一帧里,可以根据隧道当前播放位置,确定右边tab位置。 教研团队代表动画 ?

1.8K41

React高手都善于使用useImprativeHandle

当然是没有的,因此我们得自己想办法处理 02 forwardRef forwardRef 能够我们自定义组件,把内部组件 ref 属性传递给组件。...而是希望组件能够调用子组件内部某些方法 但是 React 中,又无法直接 new 一个子组件实例,像面向对象那样通过子组件实例去调用子组件方法。...05 Lottie 我上上周周末直播分享了小程序中如何实现 lottie 动画并封装成为简单易用 React 组件。...我需要拿到内部 lottie 对象,以通过 lottie.stop() 方式来控制 lottie 动画开始、暂停、停止等行为。...) 这样封装好之后,我们就可以通过 ref 组件中去调用 lottie 对象所有操作行为。

17510

复杂帧动画之移动端video采坑实现

企鹅辅导品牌页中,我们需要实现一个动画如下: 页面滚动到动画区域,播放动画, 对应动画部分如下: 帧动画当前实现有以下几种方式: GIF 动画 大家比较熟悉图片格式 lottie Airbnb...开源项目,通过解析 AE 动画为 json 数据,支持跨平台动画效果解决方案;lottie 辅导中已经有实际应用,使用过同学都表示对其实现效果和开发速度表示称赞和推荐。...GIF 排除在外 使用哪种方式实现该动画上,结合同事 @ajaxchen 调研结论: lottie 设计师通过 AE 制作了动画之后,通过 AE 插件 bodymovin 将动画导出 json...给到我们前端开发,使用这段 json 数据中,我们引入了 lottie-web 脚本来解析这段 json 数据渲染成为SVG / canvas 动画,效果如下图, 左图为用 lottie 实现,右图为我我们目标实现效果...可以看到实现还是存在着差异,颜色、数字倾斜度、虚线透视都没有达到预期,于是放弃lottie 使用,但这并不否定 lottie 实现其它动画优秀效果 APNG 在对设计师给到分段动画帧图片压缩之后

2.3K10
领券