Lottie动画

2023-05-16

Lottie动画

2018/1/17 13:19:08


地址

  • https://github.com/airbnb/lottie-android

  • https://www.lottiefiles.com/

Lottie是什么?

Lottie 中文 “洛蒂”

Lottie是Airbnb开源的一个支持 Android、iOS 以及 ReactNative,利用json文件的方式快速实现动画效果的库。

Android几种动画比较

帧动画

使用帧动画。这种方式固然可行,但是一个需要动画添加很多张图片,势必会导致apk体积变大,并且还要根据不同的尺寸进行适配。

GIF

用 Gif。但是使用 Gif 占用空间较大,而且需要为各种屏幕尺寸、分辨率做适配,并且Android本是不支持gif直接展示的。

代码图片结合

用代码加图片辅助。如之前写的 仿照驾校一点通欢迎页,这种方式繁琐并且每更新一次都需要重新写很多代码。

Android 5.x 之后提供了对 SVG 的支持,通过 VectorDrawable
AnimatedVectorDrawable 的结合可以实现一些稍微复杂的动画,但是问题和前2个类似。

Lottie 的优缺点

优点

Lottie就是支持Android, iOS, 和React Native,并且只需简单的代码就可以实现复杂动画效果的库

  • 提供了一套完整的跨平台的动画实现工作流

  • 相对于类似的实现方案GIF、手写动画、帧动画而言,这个方案更为轻量,性能和存储上都更佳。

  • 从代码上看,Android 端的实现是基于 Drawable、iOS 端是基于 Layer —— 最终都是对 canvas 的操作,中间除去解析 json 外,基本无耗费性能的行为。(官方文档有提到,masks 和 mattes 动画较为耗费性能,原因是需要额外的 Bitmap 辅助,这点需注意)

  • 也是因为动画由 json 文件描述,所以它的第三个优点是动画的更新及其方便。在之前,假如我们要完成动画动态更新需求,要么使用上述所说的 GIF、帧动画等方案,要么就自定义动画描述文件或用笨重的xml来完成动画。那么现在用 json 文件,简直再方便不过了。

缺点(仍然存在的问题)

  • Bodymovin 插件待完善,仍然有部分 AE 效果无法成功导出

  • Lottie 对 json 文件的支持待完善,目前有部分能成功导出成 json 文件的效果在移动端上无法很好的展现

  • 目前不支持文字,所有文字必须转成矢量图才能正常展现动画

  • 动画无法被编辑,即移动端无法更改远端下载到本地的动画

流程

下载软件AE (After Effects CC)

  • 界面越来越好看(我是好青年,不说脏话)

  • 界面

  • 安装插件Bodymovin

  • 地址

    https://github.com/airbnb/lottie-web

说明我是程序员(AE 太多的我也不会)简单的导出动作

  • 界面

  • 窗口-扩展-Bodymovin

  • 选择-选择输出路径(还有一些其他选项,自己研究)-Render

  • 导出的文件

AE模板下载网站(推荐)

  • http://www.adobeae.com/

  • http://c4dsky.com/

  • https://www.shareae.cn/

  • http://www.3tis.cn/

  • http://www.ae60.com/

  • https://www.93cg.com/

  • http://www.lookae.com/

  • https://www.htzyw.com/

太多了不写了 去原文看吧

https://www.zhihu.com/question/30888588

基本使用

效果

将json动画文件放在src/main/assets/

直接在xml中定义的方式

  • XML布局代码

    <com.airbnb.lottie.LottieAnimationView
        android:id="@+id/animation_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:lottie_autoPlay="true"
        app:lottie_fileName="live_and_love_in_2018.json"
        app:lottie_loop="true" />
    

    在app:lottie_fileName写动画文件名称

  • Activity 代码

  • animation_view = findViewById(R.id.animation_view);
    animation_view.setAnimation("animation-w128-h199.json");
    animation_view.loop(true);
    animation_view.playAnimation();
    

在XML布局中写了 app:lottie_fileName 属性,同时在代码中设置,代码的优先级高

使用代码的方式,支持从assets目录中直接读取json文件、json字符串的方式、stream流的方式等

从网络获取json文件,直接显示动画。这种方式很炫,你就可以不用不更新apk就不动声色的定期更新你的动画了。

  • 完整代码

    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.util.JsonReader;
    
    import com.airbnb.lottie.LottieAnimationView;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
    
    import okhttp3.Call;
    import okhttp3.Callback;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    
    public class MainActivity extends AppCompatActivity {
    
        // LottieAnimationView
        private LottieAnimationView animation_view;
    
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
    
                //判断
                if (msg.what == 0) {
                    //获取输入流
                    InputStream obj = (InputStream) msg.obj;
                    // 将流转换为Reader
                    Reader reader = new InputStreamReader(obj);
                    //创建JsonReader
                    JsonReader jsonReader = new JsonReader(reader);
                    //设置动画
                    animation_view.setAnimation(jsonReader);
                    //开始
                    animation_view.playAnimation();
    
    
                }
    
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // 实例化控件
            animation_view = findViewById(R.id.animation_view);
    
            // 创建客户端
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
    
            // 异步请求
            builder.build().newCall(new Request.Builder().url("http://123.56.1.161/LottieFiles/animation-w128-h199.json").build()).enqueue(new Callback() {
    
    
                // 请求失败
                @Override
                public void onFailure(Call call, IOException e) {
    
                }
    
    
                //请求成功
                @Override
                public void onResponse(Call call, Response response) throws IOException {
    
                    //判断是否请求成功
                    if (response.isSuccessful()) {
    
    
                        // 获取流
                        InputStream inputStream = response.body().byteStream();
    
                        //消息
                        Message message = new Message();
    
                        //设置流对象
                        message.obj = inputStream;
    
                        // 设置标识
                        message.what = 0;
    
                        //发送消息
                        handler.sendMessage(message);
    
                    }
                }
            });
        }
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lottie动画 的相关文章

  • Android中使用lottie资源

    lottie资源的使用 1 下载lottie文件的网址 xff1a https lottiefiles com xff0c 下载的文件为 json的文件 2 存放在Android的位置为 3 在应用级别的 build gradle 文件中添
  • Lottie 集成动画缺失部分 解决方法

    首先附上Lottie iOS的地址 xff0c 集成方式参见README Lottie 在集成Lottie的时候首先第一步是熟悉基本使用 首先将美工给的JSON文件导入到工程 xff08 本人通过此文顺利指导公司美工导出JSON xff0c
  • Lottie源码分析

    简介 我们使用Lottie的时候 xff0c 最关键的类就是LottieAnimationView 继承自ImageView 和LottieDrawable 继承自Drawable xff0c Lottie的描述文件最终会解析成一系列的La
  • Lottie进阶和原理分析

    简介 Lottie是aribnb发布的开源库 xff0c 它可以将AE制作的动画在Android iOS和RN代码中渲染出来 Lottie的功能及其强大 xff0c 只需要设计师使用AE设计动画 xff0c 用bodymovin导出 xff
  • Android 引入Airbnb Lottie框架后,报错Error inflating class com.airbnb.lottie.LottieAnimationView

    依赖Lottie 后 compile 39 com airbnb android lottie 2 0 0 beta4 39 添加LottieAnimationView控件 lt com airbnb lottie LottieAnimat
  • Lottie - 轻松实现复杂的动画效果

    1 Lottie 介绍 Lottie 是 Airbnb 开源的一套跨平台的完整的动画效果解决方案 xff0c 设计师可以使用 Adobe After Effects 设计出漂亮的动画之后 xff0c 使用 Lottic 提供的 Bodymo
  • android lottie字体json,Lottie 读取 JSON 文件实现动画

    Lottie Lottie 是 Airbnb 开源的一个动画项目 xff0c 它支持 iOS mac OS Android RN xff0c 由于某些复杂动画的实现 xff0c 往往会写很多的 code 来实现它 xff0c 而且调试动画的
  • ae导出json_设计师轻松实现动效转lottie神器AE插件Bodymovin

    使用原生代码在各平台实现复杂的动效是一件性价比较低的事 xff0c 还要考虑到适配不同屏幕尺寸 无论对设计师还是开发人员都是比较繁琐的 而使用了lottie之后 xff0c 可以做到同一个文件能应用到不同的平台 xff0c 还能极大地减少开
  • ae导出json_Lottie动画json文件解析

    导读 xff1a Lottie 是一个很好的动画库 xff0c 不同于FaceBook 的 POP xff0c Lottie 主要是重现由AE Adobe After Effects 实现的动画 xff0c 具体方法是AE 导出一个json
  • json格式的动图播放--Lottie插件

    在vue里添加的lottie动画 简书
  • Lottie—json文件解析

    Lottie主要类图 xff1a Lottie对外通过控件LottieAnimationView暴露接口 xff0c 控制动画 LottieAnimationView继承自ImageView xff0c 通过当前时间绘制canvas显示到界
  • Android lottie java.lang.IllegalStateException: Missing values for keyframe. 问题解决

    对接lottie时 xff0c 根据Lottie用法 xff0c 加载json xff0c 效果显示不出来 xff0c lottie官网上预览json显示正常 xff0c 大量搜索后 xff0c 发现lottie低版本 xff0c 不适用现
  • RE: 从零开始的车载Android HMI(一) - Lottie

    1 前言 多年以前汽车还是以机械仪表主体的年代 xff0c 各大汽车主机厂商并不十分关注操作系统UI的交互功能 xff0c 但是随着车载SOC算力的不断提高以及主机厂商对汽车座舱竞争的白热化 座舱的HMI在设计上在强调功能性的同时也开始关注
  • Lottie动画 轻松使用

    Android 敏捷开发助手 Lottie动画 轻松使用PNG JPG等普通图片高保真转SVG图Android 完美的蒙层方案Android MMKV框架引入使用强大无匹的自定义下拉列表Google Protobuf 实践使用开发 Andr
  • Lottie动画

    Lottie动画 2018 1 17 13 19 08 地址 https github com airbnb lottie androidhttps www lottiefiles com Lottie是什么 xff1f Lottie 中文
  • 阿里犸良导出的json文件怎么使用

    犸良是什么 犸良作为一站式动效制作平台 通过海量的动效素材以及可视化编辑能力 帮助零基础的用户轻松完成动效制作 支持全平台iOS Android H5 小程序 无论是营销展位 活动页面 空状态还是产品icon 让动效更简单 官网地址 htt
  • Lottie系列一:介绍与使用

    文章目录 一 Lottie 二 Lottie起源 社区 2 1起源 2 2 社区 2 3 Why Lottie 效率 还原度高 体积 研发的优势 2 4 When Lottie 2 5 Lottie不支持的效果 2 6 官方Demo和在线预
  • React Native Lottie - 动画结束时反转

    Context 我是lottie react native的新手 并且已经成功实现了我的第一个动画 constructor props super props this state progress new Animated Value 0
  • 使用 Lottie 自定义 UIRefreshControl

    我的目标是替换默认的微调器UIRefreshControl与洛蒂动画 我的问题是 当我拉下动画时 动画不会立即播放UICollectionView其子视图是UIRefreshControl 仅当我稍微向下滚动并暂停手指时才会播放动画 当我再
  • 如何在数据加载期间 IsBusy 为 true 时至少显示一次 Lottie 动画?

    On my Xamarin Forms 项目 我想显示一个洛蒂动画 during API调用或期间加载网站 in a WebView 为此 我限制了IsVisible的财产洛蒂动画 to the IsBusy我的财产视图模型 这个效果很好

随机推荐

  • mount:No medium found

    使用vmware时 xff0c 科技将iso作为系统的镜像 但是 xff0c 在配置yum源的时候 xff0c 可能会遇到这样的问题 究其原因 xff0c 是由于镜像文件未启动 解决方法 xff1a 右击 xff0c 点击连接 xff0c
  • Android 9.0 Settings 搜索功能屏蔽某个app

    1 概述 在9 0的系统rom产品定制化开发过程中 在系统Settings的开发功能中 最近产品需求要求去掉搜索中屏蔽某个app的搜索 就是根据包名 不让搜索出某个app 在系统setting中 搜索功能中 根据包名过滤掉某个app的搜索功
  • 什么叫跨平台语言

    什么叫跨平台语言呢 xff1f 今天就个人理解简单谈一下 xff0c 还望指正 简单的说 xff0c 就像插座和插头 xff0c 这世界上有没有完全通用的插座呢 xff1f 没有 但是比如某家公司 xff0c 制作了插座和插头 xff0c
  • rpm包管理功能全解

    通常在linux系统中 xff0c 服务是要通过程序来提供的 xff0c 通过调用各种接口编译好之后的源码包文件 xff0c 需要使用rpm xff08 redhat package manager xff09 命令来安装并提供相应的服务
  • 加密

    lt div id 61 34 article content 34 class 61 34 article content clearfix csdn tracking statistics 34 data pid 61 34 blog
  • Ubuntu加域后域账号登录账号串号

    Ubuntu加域后域账号登录账号串号 错误实例原因分析解决办法 错误实例 例如这里用账号test01登录Ubuntu桌面 xff0c 进入桌面后进入终端 test02 64 PCtest01 这里可以看出账号不是test01 原因分析 加入
  • 虚拟机迁移提示设备 “HD audio“ 的备用类型不受支持

    错误原因 尝试 vMotion 虚拟机失败并显示以下错误 xff1a 设备 HD audio 的备用类型不受支持 HD 音频设备在 ESXi 的虚拟机上不受支持 xff0c 并且不能作为通过 vSphere Client 添加的设备 因为图
  • 获取windows10远程桌面记录的用户名密码

    Windows 密码恢复工具 单击此下载链接 输入 download 作为用户名 xff0c 然后 39 nirsoft123 39 作为密码 下载软件包后 xff0c 使用以下密码从中提取文件 xff1a nirsoft123 双击net
  • hisi3516下yuv图片到nnie bgr_u8c3格式转换

    首先要看的sdk文档 xff08 HiIVE API 参考 xff09 其中详细说明了 IVE IMAGE TYPE YUV420SP IVE IMAGE TYPE YUV420P IVE IMAGE TYPE YUV422SP IVE I
  • android 交叉编译dbow3

    ndk 20版本是可以直接过的 xff0c 但是ndk14b时 xff0c 编译报如下错误 xff1a arm linux androideabi gcc error unrecognized command line option 39
  • macOS无法验证此App不包含恶意软件

    换了iMac xff0c 刚用有点不习惯 xff0c 特别是它这安全机制 xff0c 比ubuntu高太多 想用android ndk进行交叉编译 xff0c 里面的很多那种可执行文件 xff0c 会弹出如下错误 解决办法 xff1a 1
  • 初识opencl

    初识opencl 以一个例子开头 以一个例子开头 在自己的笔记本电脑上 win10 安装intel的那个opencl包 xff0c 安装后 xff0c 记得将include与lib包拷贝出来 xff0c 然后在以后的使用中只要链接这个库就o
  • Android 10.0 系统settings系统属性控制一级菜单显示隐藏

    1 概述 在进行定制化开发中 系统settings的一级菜单有些在客户需求中 要求通过系统属性来控制显示隐藏 从而达到控制一级菜单的显示的目的 而系统settings是通过静态加载的方式负责显示隐藏 2 系统Settings一级菜单显示隐藏
  • OpenCL并行加减乘除示例——数据并行

    数据并行化计算与任务并行化分解可以加快程序的运行速度 现在只讲数据并行 下一节讲任务并行 如下基本算术例子 xff0c 输入数组A和数组B xff0c 得到输出数组C xff0c C的结果如图中output所示 A数组如下 xff1a 5行
  • 递归与非递归的比较

    递归与非递归的比较 非递归效率高 xff1b 递归代码写出来思路清晰 xff0c 可读性强 生成可执行文件大小应该和编译器有关吧 递归的话函数调用是有开销的 xff0c 而且递归的次数受堆栈大小的限制 以二叉树搜索为例 xff1a bool
  • Package **** was not found in the pkg-config search path.

    Package was not found in the pkg config search path Package grpc 43 43 was not found in the pkg config search path Perha
  • 单链表的操作(创建、查找、插入、删除、遍历、就地逆转等)

    先贴原代码 xff0c 后面再一一做解释 单链表的各创建等等操作 日期 xff1a 2017年11月3日 21 xff1a 46 include 34 stdafx h 34 include lt iostream gt include 3
  • conda安装最新的dlib

    conda install c conda forge dlib conda install c conda forge label cf201901 dlib
  • TypeError: __new__() got an unexpected keyword argument 'serialized_options'

    Python 2 7 12 default Nov 12 2018 14 36 49 GCC 5 4 0 20160609 on linux2 Type 34 help 34 34 copyright 34 34 credits 34 or
  • Lottie动画

    Lottie动画 2018 1 17 13 19 08 地址 https github com airbnb lottie androidhttps www lottiefiles com Lottie是什么 xff1f Lottie 中文