目录:

1. LoadingView组件功能介绍
2. Lottie使用方法
3. Lottie开发实现
4.《HarmonyOS三方件开发指南》系列文章合集

1. LoadingView组件功能介绍
1.1. 功能介绍:
前言:

对于一些简单的动画我们开发者可以使用系统提供的一些方法来实现,但是在实际开发中设计师给出的动画都是很炫酷复杂的,如果采用手写代码的方式,就要面对很多问题:

(1) 如不同平台要重复开发,

(2) 开发者和动画设计师之间的沟通问题,

(3) 复杂动画对应的代码也非常复杂,后期维护困难等。

Lottie功能介绍:

Lottie是Airbnb 专门为移动开发设计的一个第三方开源库,他的优点如下:

(1) 跨平台(目前支持Android、iOS 、Web、React Native等平台),本组件完成了Lottie再HarmonyOS上的移植。

(2) 设计师通过After Effects将动画导出JSON文件,然后由Lottie加载和渲染这个文件并转成相应的代码,由于是JSON文件,文件也会很小,可以减少App包的大小。

(3) 把动画制作和APP开发的工作分开,由设计师来完成动画的制作

1.2. 模拟器上运行效果:

2. Lottie使用方法
2.1. 新建工程,增加组件Har包依赖
在应用模块中添加HAR,只需要将lottie.har复制到entry\libs目录下即可(由于build.gradle中已经依赖的libs目录下的*.har,因此不需要在做修改)。

2.2. 增加动画json文件
在resources/rawfile目录下,放入动画对应的json文件,如bullseye.json.

2.3. 修改主页面的布局文件
修改主页面的布局文件ability_main.xml,在Layout标签中增加app命名空间。

然后添加一个com.airbnb.lottie.LottieView组件,设置LottieView_jsonFile属性。

全部代码如下:

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
xmlns:app="http://schemas.huawei.com/apk/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical"> <com.airbnb.lottie.LottieView
ohos:id="$+id:lottieView"
ohos:height="match_content"
ohos:width="match_content"
app:LottieView_jsonFile = "resources/rawfile/bullseye.json"
/>
</DirectionalLayout>

3. Lottie开发实现
3.1. 新建一个Module
新建一个Module,类型选择HarmonyOS Library,模块名为lottie,如图

3.2. 主要类介绍

3.3. JSON解析流程介绍

// 解析json文件,获取InputStream
ResourceManager resourceManager = getContext().getResourceManager();
RawFileEntry rawFileEntry = resourceManager.getRawFileEntry(jsonFile);
resource = rawFileEntry.openRawFile(); // 解析json文件,返回lottieComposition
JsonReader reader = JsonReader.of(buffer(source(resource))); // 构造compositionLayer
compositionLayer = new CompositionLayer(
null,
LayerParser.parse(lottieComposition),
lottieComposition.getLayers(),
lottieComposition);

其中json文件大致说明如下:

{

"w", // 0 宽度
"h", // 1 高度
"ip", // 2 其实帧
"op", // 3 结束帧
"fr", // 4 帧率
"v", // 5 版本号
"layers", // 6 图层列表
"assets", // 7 图片资源列表
"fonts", // 8 字体列表
"chars", // 9 字体具体样式
"markers" // 10 遮盖层列表 }

其中assets图片资源说明如下:

"assets": [

{

"id", // 0 图片id
"w", // 2 宽度
"h", // 3 高度
"p", // 4 图片名称
"u" // 5 图片路径 } ]

layers说明如下:

"layers": [

{

"nm", // 0 名称
"ind", // 1 索引
"refId", // 2 指向的资源id
"ty", // 3 图层类型(0:复合型,1: Solid类型 2:图片类型 4:Shape类型 5:Text类型) parent", // 4 父图层
"sw", // 5 Solid宽度
"sh", // 6 Solid高度
"sc", // 7 Solid颜色
"ks", // 8 包含的动画
"tt", // 9 遮盖类型
"masksProperties", // 10 遮盖列表
"shapes", // 11 图层包含的形状元素
"t", // 12 文本属性
"ef", // 13 填充效果(Lottie doesn't support layer effects)
"sr", // 14 时间调整系数
"st", // 15 图层起始帧
"w", // 16 图层宽度
"h", // 17 图层高度
"ip", // 18 图层起始关键帧
"op", // 19 图层结束关键帧 } ]

layers中shapes解析如下:

"shapes": [

{

"ty", //类型(如gr:图形组, fl:图形填充, sh:图形路径)

"nm",//名称
"hd", // 是否隐藏
"it" // 图形的轨迹集合 [{
"ind",//索引
"ks", //动画关键帧 { "t", // startFrame
"s", // startValue
"e", // endValue
"o", // 动画起始点坐标
"i", // 动画结束点坐标
"h", // 插值器类型
"to", // 7 路径切线1坐标
"ti" // 8 路径切线2坐标 } }] } ]

3.4. 播放流程介绍

Lottie源码播放调用栈梳理如下:

LottieDrawable.draw()

drawInternal()

drawWithOriginalAspectRatio()

baseLayer.draw()

compositionLayer.drawLayer()

baseLayer.draw()

compositionLayer.drawLayer()

baseLayer.draw()

ShapeLayer.drawLayer()

ContentGroup.draw()

FillContent.draw() or StrokeContent.draw()

3.5. 主流程介绍

3.6. 编译HAR包

利用Gradle可以将HarmonyOS Library库模块构建为HAR包,构建HAR包的方法如下:

在Gradle构建任务中,双击PackageDebugHar或PackageReleaseHar任务,构建Debug类型或Release类型的HAR。

待构建任务完成后,可以在工程目录中的loadingview> bulid > outputs > har目录中,获取生成的HAR包。

4.项目源码

见github代码仓:https://github.com/isoftstone-dev/Lottie_HarmonyOS

更多原创,请关注"软通动力HarmonyOS学院https://harmonyos.51cto.com/column/30

作者:软通田可辉
想了解更多内容,请访问51CTO和华为合作共建的鸿蒙社区:https://harmonyos.51cto.com

HarmonyOS三方件开发指南(15)-LoadingView功能介绍的更多相关文章

  1. HarmonyOS三方件开发指南(14)-Glide组件功能介绍

    <HarmonyOS三方件开发指南>系列文章合集 引言 在实际应用开发中,会用到大量图片处理,如:网络图片.本地图片.应用资源.二进制流.Uri对象等,虽然官方提供了PixelMap进行图 ...

  2. HarmonyOS三方件开发指南(13)-SwipeLayout侧滑删除

    鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录:1. SwipeLayout组件功能介绍2. SwipeLayout使用方法3. SwipeLa ...

  3. HarmonyOS三方件开发指南(19)-BGABadgeView徽章组件

    目录: 1.引言 2.功能介绍 3.BGABadgeView 使用指南 4.BGABadgeView 开发指南 5.<HarmonyOS三方件开发指南>系列文章合集 引言 现在很多的APP ...

  4. HarmonyOS三方件开发指南(12)——cropper图片裁剪

    鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录:1. cropper组件功能介绍2. cropper使用方法3. cropper组件开发实现4. ...

  5. HarmonyOS三方件开发指南(16)-VideoCache 视频缓存

    目录: 1.引言 2.功能介绍 3.VideoCache使用指南 4.VideoCache开发指南 5.<HarmonyOS三方件开发指南>系列文章合集 引言 对于视频播放器这个app大家 ...

  6. HarmonyOS三方件开发指南(17)-BottomNavigationBar

    目录: 1.引言 2.功能介绍 3.BottomNavigationBar使用指南 4.BottomNavigationBar开发指南 5.<HarmonyOS三方件开发指南>文章合集 引 ...

  7. HarmonyOS三方件开发指南(8)——RoundedImage

    [小年答谢,新春送礼]免费抽取1000元京东卡+更多新春好礼~查看详情>>> 目录: 1. RoundedImage组件功能介绍 2. RoundedImage使用方法 3. Rou ...

  8. HarmonyOS三方件开发指南(4)——Logger组件

    目录: 1.      Logger功能介绍 2.      Logger使用方法 3.      Logger开发实现 4.      源码上传地址 1.      Logger功能介绍1.1.   ...

  9. HarmonyOS三方件开发指南(5)——Photoview组件

    PhotoView使用说明 1.  PhotoView功能介绍1.1 组件介绍:        PhotoView是一个继承自Image的组件,不同之处在于:它可以进行图击放大功能,手势缩放功能(暂无 ...

随机推荐

  1. sentry.event & UnhandledRejection & promise rejection

    sentry.event & UnhandledRejection & promise rejection Non-Error promise rejection captured s ...

  2. memcached php

    What is Memcached? Free & open source, high-performance, distributed memory object caching syste ...

  3. 24 WAYS to impress your friends

    24 WAYS to impress your friends 24 ways is the advent calendar for web geeks. For twenty-four days e ...

  4. 最新 Apple iPhone 12 价格 All In One

    最新 Apple iPhone 12 价格 All In One 美版价格 Apple iPhone 12 mini $699 Apple iPhone 12 $799 Apple iPhone 12 ...

  5. WLAN-AC+AP射频一劳永逸的调优方式

    AP射频调优组网图 射频调优简介 射频调优的主要功能就是动态调整AP的信道和功率,可以使同一AC管理的各AP的信道和功率保持相对平衡,保证AP工作在最佳状态.WLAN网络中,AP的工作状态会受到周围环 ...

  6. django学习-17.如何提供一个规范的接口返回值

    目录结构 1.前言 2.进行实际的一个完整流程操作 2.1.第一步:编写一个用于查询用户数据的视图函数 2.2.第二步:编写对应的一个url匹配规则 2.3.第三步:启动django项目[hellow ...

  7. 02_Mysql用户管理之Navicat下载及安装

    Navicat可以说是最好的Mysql客户端管理软件了,本博客将带你完成Navicat的下载与安装. 1.下载(https://www.navicat.com.cn/products)

  8. Linux/UNIX编程如何保证文件落盘

    本文转载自Linux/UNIX编程如何保证文件落盘 导语 我们编写程序write数据到文件中时,其实数据不会立马写入磁盘,而是会经过层层缓存.每层缓存都有自己的刷新时机,每层缓存都刷新后才会写入磁盘. ...

  9. 使用OkHttp和OkHttpGo获取OneNET云平台数据

    图1是OneNET官网关于NB-IoT文档关于批量查询设备最新数据的介绍,可以看到GET方法的URL地址和两个头部信息(图2是Htto请求消息结构).所以在写url时,还要添加两行头部字段名,不然获取 ...

  10. 从跳频技术聊CDMA/WIFI之母海蒂·拉玛传奇的一生

    导语:本篇的内容都是 文末的参考文章摘要而来的,本人根据自己的癖好,以及对 海蒂·拉玛 人生的感慨整理成本文. "WiFi"之母的海蒂·拉玛在中国的知名度,比起克劳德·香农应该也不 ...