HarmonyOS鸿蒙Next征文:动画JS卡片,打造惊艳桌面

HarmonyOS鸿蒙Next征文:动画JS卡片,打造惊艳桌面 动画 JS 卡片,打造惊艳桌面

根据官方 Codelab 时钟服务卡片开发,我们得知一件事

服务卡片可以主动刷新了

OHHHHHHH

OHHHHHHH

OHHHHHHH

以秒刷新的时钟都可以,那动画是不是也可以呢?

我抱着试一试的心态,就做到了下面动图所示的。

下面开始描述实现过程

1.首先新建一个 JS 服务卡片

我当前的项目为 jsUI 项目为主导的项目,java 也一样。
在项目目录中选择 entry 文件夹 ==> New ==> Service Widget
进入卡片模板选择

其实选哪个都无所谓,反正页面也要自己写。这里我选择的是

Image With Information (图文模板)

继续下一步

上图中名字描述都可以先不写,直接选择类型为 JS

然后选择服务卡片的大小:4*4

(既然为了将动画放入卡片,那必须要大,要大,要最大的。)

然后我们就得到了一个最简单的 JS 卡片


2.书写 JS 卡片页面

用 JS 书写页面,自然是找前端三件套文件。

因为卡片是手机桌面应用的一部分,所以对性能又严格的要求。

这里我们不能用 js 书写页面逻辑,只能用 json 来书写页面中需要绑定的数据。

下面是需要书写的 hml,css,json 三个文件的代码。

小伙伴们看到这里应该明白我准备干嘛了吧,我要通过图片变换来达到动画的效果。

众所周知,一段视频是由一连串连贯的图片组成的。

前置常识:
1秒60帧 == 1秒60张图片
当然,这样的视频体积是巨大的,所以我们平常的视频是经过压缩的,
视频压缩应用最广泛的技术:H264 H265
原理:连贯动作图片,仅渲染变动的像素,所以可以大量减少视频体积

当然,我们只是几张本地图片,还用不上这样的优化。

不过后期可以考虑一下。

那么先看一下目前仅仅书写完卡片前端 hml css json ,做到什么效果吧。


3.通过java在AceAbility传递事件数据

在 JsUI 项目中的 Java Ace框架位置,在下图。

图中 onTriggerFormEvent 红框框起的,即为我们需要获取点击事件的生命周期。

当然,还有卡片相关的其他生命周期。

图中红框拉住的内容,data 中的键名 与 actions中params的键名,是一 一对应。

所以我们在 java 代码中使用 FormBindingData 可以将数据通过

updateForm(formId,bindingData);

即可对卡片进行内容刷新,那么下面你应该是得到了一个这样的结果。


4.通过ServiceAbility将事件放入后台自动化

手动流程走完,就开始写一个自动流程,让图片可以自动更换

这里需要新建一个HarmonyOS开发概念中三大Ability中最重要的一个PA,ServiceAbility。

如果你和我一样是一个 JS 鸿蒙开发者,那么对于ServiceAbility的利用简直太爱了。

下面是新建方法:

得到上面三张图片最后一个,就说明新建成功了。

在ServiceAbility中也同样有自己的生命周期,我们先要做的第一件事是启动它。

并且要从之前在AceAbility中的onTriggerFormEvent卡片事件上,传值到Service里面。

尽管官方codelab中使用了java的orm对象映射数据库,我们用更方便的办法吧。

我们选择用 intent 传值,下面是MainAbility代码:

我们通过 intent.setParam(“formId”,formId);

将卡片id传入Service,并且启动了它。那在Service里面哪里去获取呢?

小伙伴可能会去…

我们要去onCommand去继续intent获取后的代码书写,如下:

我们从 onCommand 获取到卡片的 formId,就可以在Service里面进行卡片的刷新。

为了更好的执行自动换图,按照官方codelab的方法,书写了定时器和卡片刷新的具体方法。

在 updateForms 函数中,我们同样是利用 FormBindingData 进行卡片数据更新。其中的params参数,我们当然是手写的字符串 json ,这样才能把自己需要的参数携带进去。

目前就两张图片,test1.jpg 和 test2.jpg。所以才有了如下代码:

按道理来说,如果你书写到这一步,应该会得到如下结果:


5.自定义素材(建议)

因为我个人是一个前端,对图形有一些常用工具和涂鸦基础。

所以我通过Spine就将之前水视频的素材导出做了测试。

图中的人物是BiliBili虚拟形象中的 33 娘(2021拜年祭)。

最后再来看一下效果:


6.未完待续 (本帖持续更新…)

目前已知的bug

  1. 事件需要约束开启,不让定时器重复导致加速。
  2. 背景没有,达不到真正的惊艳,原画素材需要分辨率增加。
  3. 更复杂的动画绝对需要对图片进行压缩优化,所以可能会加入云服务或者java开源包,对序列图片进行类视频压缩。

B站个人主页:https://space.bilibili.com/22690066

昵称:九弓子

如需gitee源码,请马上点赞关注评论区放置gitee地址~~~~~~~hiahia


更多关于HarmonyOS鸿蒙Next征文:动画JS卡片,打造惊艳桌面的实战教程也可以访问 https://www.itying.com/category-93-b0.html

14 回复

这里有个最要命的问题,JS卡片 只能加载common目录里的图片吗?怎么加载网络图片或者加载用户相册里的图片?

更多关于HarmonyOS鸿蒙Next征文:动画JS卡片,打造惊艳桌面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


大佬啊,帖子质量都很高啊,大家可以关注一波

期待HarmonyOS能在未来推出更多针对企业用户的解决方案。

前来膜拜大佬

目前的计划:

  1. 看到征文活动说需要王者战绩查询(安排)

  2. 那能查询王者,我得多做点。

  3. 后续文章内容可能会涉及到一些其他方面的应用:服务端python爬虫,HarmonyOS应用开发本身的java网络请求,数据库

----有任何开发意见,这里留言哈

(顺便给自己顶个帖)

请问大佬,国际化字段 $t{{xxxxxx}} 里面的值如何卡片进行更新?

这个会导致耗电量增加吗?

我认为这个征文目的是为了表达开发思路总结 与 学习分享~~ ,结合极限的开发,利用官方api学习鸿蒙,这篇文章的目的。

效果很酷炫,我也想照着写一个

支持一下,准备照着写个demo

真的很不错,希望可以继续做下去

希望HarmonyOS能加强与其他品牌设备的兼容性,让更多人受益。

鼓掌鼓掌

HarmonyOS 鸿蒙 Next:动画JS卡片,打造惊艳桌面

1. 突破传统,卡片焕新:

告别静态卡片,利用JS强大的动画能力,打造动态交互体验。卡片不再是简单的信息展示,而是用户与桌面互动的窗口。

2. 流畅动画,丝滑体验:

HarmonyOS底层优化,结合JS动画库,实现流畅的过渡效果。无论是卡片展开、收起,还是内容切换,都能带来丝滑般的视觉享受。

3. 个性定制,彰显自我:

提供丰富的动画效果和自定义选项,用户可以根据个人喜好,打造独一无二的桌面风格。将创意融入卡片设计,让桌面成为展现个性的舞台。

4. 应用场景,无限可能:

动画JS卡片可广泛应用于天气、日程、音乐等各类应用。动态展示天气变化,直观呈现日程安排,音乐卡片随着节奏律动,为用户带来更直观、更沉浸的使用体验。

5. 未来已来,鸿蒙引领:

HarmonyOS 鸿蒙 Next,以动画JS卡片为起点,开启桌面交互的新篇章。未来,更多创新功能和交互方式将不断涌现,为用户带来更智能、更便捷的数字生活体验。

回到顶部