目录:

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. vue & async mounted

    vue & async mounted refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  2. React Hooks: useRef All In One

    React Hooks: useRef All In One useRef https://reactjs.org/docs/hooks-reference.html#useref refs xgqf ...

  3. Koa & node.js

    KOA https://github.com/koajs/koa https://koajs.com/ $ nvm install 7 # node.js 7 + $ nvm install 10 $ ...

  4. 如何实现一个 markdown 图片粘贴上传的博客后台系统

    如何实现一个 markdown 图片粘贴上传的博客后台系统 js 实现 drag & drop / copy & paste image uploader MongoDB 设计文档对象 ...

  5. Flutter 区分开发环境和生产环境

    Uri _baseUrl; final isProd = const bool.fromEnvironment('dart.vm.product'); if (isProd) { _baseUrl = ...

  6. NGK团队是如何打造超高回报率的BGV项目的?

    NGK旨在激励网络的供给端引导去中心化的节点集群,用于促进网络使用和增加带宽流动. 具体来讲,在未来的24个月内,NGK会将部分生态参与者纳入白名单系统有兴趣的参与者可关注官方信息. 对内,NGK采用 ...

  7. MacOS下PHP7.1升级到PHP7.4.15

    最近写SDK的时候需要用到object类型提示符,PHPStorm智能提示说需要PHP7.2以上才能支持这种类型提示. 我一查我本机的PHP是7.1.30版本,于是考虑升级一下PHP版本. 首先要尝试 ...

  8. Hive安装与配置——2.3.5版本

    Hive安装配置 Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据.它架构在Hadoop之上,提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行,使查询和分 ...

  9. TERSUS无代码开发(笔记04)-CSS样式设置

    CSS样式设置 1.常用显示样式 大小尺寸 说明  间距边距 说明  各类颜色 说明  width 宽 margin 外边距         color  颜色        height 高 pad ...

  10. 创建时间和更新时间两个选一个的情况和select case when ... then ... else ... end from 表 的使用

    1.查询时间,如果更新时间update_time为空就查创建时间create_time,否则查更新时间update_time select update_time,create_time, case ...