做鸿蒙开发快半年,最近终于把项目里的静态卡片改成了官方推的互动卡片,踩了整整两天坑,来给大家捋捋清楚。

很多刚接触鸿蒙卡片的朋友可能分不清:动态卡片和互动卡片到底有啥区别?简单说:普通动态卡片只能做简单的刷新,最多加个淡入淡出;但互动卡片不一样,不仅支持帧动画、3D变换,还能调用陀螺仪做交互动效,甚至能把动效做到卡片外面,就是官方说的「破框效果」——比如音乐卡片切歌的时候,音符能漫出卡片到桌面,视觉冲击力直接拉满。

开发互动卡片其实核心就两步,先按照普通ArkTS卡片的流程创建动态卡片当入口,再配置LiveFormExtensionAbility就行。需要注意的是,一定要在module.json5里把extension的type改成live-form,不然后续点击根本触发不了动效,我一开始就是漏了这个配置,卡了快三个小时。

状态管理和数据同步也是个大坑。互动卡片和主应用是跨进程的,如果你做的是音乐卡片,要把主应用的播放状态、收藏状态同步到卡片上,不能直接用Intent传,得用rdb存歌曲列表和状态,用文件存储存触发动作的上下文,主应用切歌之后再调用formProvider.updateForm把最新信息推到卡片上,这样不管开不开应用,桌面卡片都能显示正确状态。

我自己做了个运动打卡的互动卡片,点开始按钮就能触发「破框」的动效,还能实时把消耗的卡路里更回写到卡片上,整体流程走通之后,其实比想象中简单,主要就是配置容易错,跨进程同步要记对方法。感兴趣的朋友可以去官方文档翻一翻互动卡片的开发指南,现在鸿蒙Next对卡片的支持已经挺完善了,做出来的效果确实比静态卡片香太多。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐