Lottie简单使用

一、简介

Lottie 是Airbnb开源的一个面向 iOS、Android、React Native 的动画库,能分析 Adobe After Effects 导出的动画,并且能让原生 App 像使用静态素材一样使用这些动画,完美实现动画效果。

现在使用各平台的 native 代码实现一套复杂的动画是一件很困难并且耗时的事,我们需要为不同尺寸的屏幕加载不同的素材资源,还需要写大量难维护的代码,而Lottie可以做到同一个动画文件在不同平台上实现相同的效果,极大减少开发时间,实现不同的动画,只需要设置不同的动画文件即可,极大减少开发和维护成本。

Lottie 地址:https://github.com/airbnb/lottie-android

Lottie 官网:https://airbnb.design/lottie/

为什么使用Lottie

  1. 跨平台只有制作一套json动画文件便可以跨平台在 Android  ios ReactNeative上使用,lottie库负责解析json文件并播放动画

  2. 可以支持网络下载json文件,本地播放,实时更新动画资源。

  3. 运行时效率上仅仅用Canvas去draw而已,流畅度非常棒,所以哪怕在Listview里去大量显示,内存占用和绘图效率都远远高于帧动画。

  4. 实现效果可以按设计出的100%还原到产品中

  5. 开发周期大大减少

使用Lottie实现的效果

lottie

Android端使用方法

1. 在项目 的 build.gradle 文件添加依赖

dependencies {
  implementation 'com.airbnb.android:lottie:$lottieVersion'
}

2. 添加 Adobe After Effects 导出的动画文件

Lottie默认读取Assets中的文件,我们需要把设计导出的动画文件.json 保存在app/src/main/assets文件里。

3. 使用Lottie

  1. 直接布局加载*.json文件的方法:
  <com.airbnb.lottie.LottieAnimationView
            android:id="@+id/animation_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            app:lottie_fileName="Logo/LogoSmall.json"
            app:lottie_loop="true" />

lottie_fileName表示本地Assets文件中存的json动画文件

lottie_loop表示动画循环执行

2. 代码加载动画方法

<com.airbnb.lottie.LottieAnimationView
            android:id="@+id/animation_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:lottie_fileName="hello-world.json"
            app:lottie_loop="true"
            app:lottie_autoPlay="true" />

lottie_autoPlay表示设置是否自动启动播放

        //声明控件
        lottieAnimationView = findViewById(R.id.animation_view);
        //这个可有可无,如果不涉及本地图片做动画可忽略
        lottieAnimationView.setImageAssetsFolder("images");
        //设置动画文件
        lottieAnimationView.setAnimation(".json");
        //是否循环执行
        lottieAnimationView.loop(true);
        //执行动画
        lottieAnimationView.playAnimation();
  1. 加载网络.json文件
private void loadUrl(String url) {
        Request request = new Request.Builder().url(url).build();
        OkHttpClient client = new OkHttpClient();
        client.newCall(request).enqueue(new Callback() {
            @Override public void onFailure(Call call, IOException e) {}
            @Override public void onResponse(Call call, Response response) throws IOException {
                try {
                    JSONObject json = new JSONObject(response.body().string());
                    LottieComposition.Factory
                            .fromJson(getResources(), json, new OnCompositionLoadedListener() {
                                @Override
                                public void onCompositionLoaded(LottieComposition composition) {
                                    lottieAnimationView.setComposition(composition);
                                    lottieAnimationView.playAnimation();
                                }
                            });
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
    }

常用方法

  • animationView.isAnimating();  动画是否在播放
  • animationView.playAnimation();    播放动画
  • animationView.pauseAnimation();   暂停动画
  • animationView.cancelAnimation();  取消动画
  • animationView.setProgress(progress);  设置进度,progress范围0~1
  • animationView.setMinAndMaxProgress(min,max);  设置播放范围,0~1
  • 监听动画进度
  • 设置动画硬件加速
  • 缓存动画
  • Lottie本身在 Android 平台已经做了适配工作,而且适配原理很简单,解析时,从 读取宽高之后会再乘以手机的密度。再在使用的时候判断适配后的宽高是否超过屏幕的宽高,如果超过则再进行缩放。以此保障 Lottie 在 Android 平台的显示效果

接入遇到的坑

  1. 使用Lottie超过2.8.0版本必须兼容androidx,api28

  2. 使用Lottie2.0系列的必须通知设计导出json文件的时候兼容旧版本,如下图:

  3. 内存溢出情况原因分析:如果设计直接从PS里面做出的动画在AE里面导出,就会出现很多副本图片,我们加载json文件就会像帧动画一样循环那些图片,对于配置低的手机当我们几个动画同时循环播放的时候就会形成多张图片在那轮询造成内存溢出。

  4. 机型适配问题需要注意:对于需要落到固定位置的动画,切记一定要让设计标出动画的尺寸

具体设计师如何生成json文件可以参考官方文档。

### 如何在 HTML 中添加和配置 Lottie 动画 要在 HTML 项目中集成并使用 Lottie 动画,可以按照如下方法操作: #### 安装依赖库 首先,在 HTML 页面中引入 Lottie 的 JavaScript 库。可以通过 CDN 方式快速加载此库。 ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.7.4/lottie.min.js"></script> ``` 这一步骤确保了可以在网页上利用 Lottie API 来控制动画[^1]。 #### 创建容器元素 接着,在页面内创建一个用于承载动画的 DOM 元素。通常是一个 `div` 或者其他合适的标签,并为其指定唯一的 ID 属性以便后续引用。 ```html <div id="lottie-animation-container"></div> ``` 上述代码片段定义了一个名为 `lottie-animation-container` 的 div 作为未来显示动画的地方[^2]。 #### 加载 JSON 数据文件 如果打算展示本地存储的动画,则需提前准备好对应的 JSON 配置文件,并将其路径告知给 Lottie 实例化对象;如果是远程 URL 提供的数据源,则直接传入完整的链接即可。 对于本地资源而言,假设已经有一个位于 `/path/to/local/lottie.json` 下面的 JSON 文件,那么应该像这样读取它: ```javascript fetch('/path/to/local/lottie.json') .then(response => response.json()) .then(data => { const container = document.getElementById('lottie-animation-container'); lottie.loadAnimation({ container: container, renderer: 'svg', loop: true, autoplay: true, animationData: data // 这里的data就是之前获取到的对象形式的JSON内容 }); }) .catch(error => console.error('Error loading the local Lottie file:', error)); ``` 这段脚本展示了如何异步请求本地 JSON 文件并通过 fetch API 解析成 JavaScript 对象传递给 Lottie 初始化函数。 而对于在线资源来说,只需要简单修改为提供有效的 HTTP(S) 地址字符串代替上面提到的方法调用部分就可以了。 #### 控制动画行为 一旦成功设置了动画实例之后就可以自由操控其属性比如速度(`setSpeed`)、循环模式(`loop`)以及自动播放选项(`autoplay`)等特性。还可以监听某些特定时刻发生的事件例如完成一次迭代后触发回调处理逻辑等等[^4]。 例如设置两倍速率回放当前动画序列: ```javascript const animationInstance = lottie.loadAnimation({...}); animationInstance.setSpeed(2); ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值