0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

华为图库服务卡片是如何实现的

HarmonyOS开发者 来源:HarmonyOS开发者 作者:HarmonyOS开发者 2021-08-04 14:44 次阅读

华为图库本身有很多功能,按照传统App的交互方式,用户都是需要先进入图库应用,然后再找到相应功能进行使用。随着App功能越做越多,其传统的交互方式也渐渐显露出繁琐的地方。

因此考虑在图库中采用服务卡片技术,把图库App中希望用户能快速使用的,具备竞争力的功能直接通过卡片方式释放出来。比如:图库的相册卡片能够直接让用户在桌面上直接浏览相册图片,图库的创作卡片可以让用户从桌面上一步进入视频编辑或拼图创作。

本文会为大家介绍图库服务卡片的规格、功能,解析图库服务卡片整体的设计思路以及内部模块结构,并且就图库服务卡片几个关键功能点的具体实现进行展开,当然也会就服务卡片开发过程中可能会遇到的问题提供一些建议。

1图库服务卡片功能简介1卡片样式

图库服务卡片按照功能划分为:相册卡片和创作卡片。

相册卡片方便用户直接查看图片内容,按照样式又可以划分为2x2、2x4、4x4三种。创作卡片方便用户快速使用图库应用的内容创作功能,只有2x4一种样式。这里2x2即是指占桌面4个图标位置,其他以此类推。

2卡片呼出方式用户可以通过两种方式呼出图库服务卡片,一种是在图库应用的桌面图标上滑。另一种是长按桌面卡片就会出现一个弹框。用户点击更多服务卡片,就能看到有多个可选的图库服务卡片样式,用户任选一个就能设置到桌面上。3照片的选择和浏览功能

用户长按一个相册卡片会出现一个弹框,用户点击编辑就能对相册卡片设置显示某张图片或者某个相册。用户直接单击相册卡片封面就能直接以大图的方式浏览当前卡片显示的图片。

4照片轮播功能

桌面上添加了多个相册卡片,每个卡片都显示了不同的相册,在到了设定的轮播间隔时间后,卡片的封面就会自动切换到相册中的下一张图。

5内容创作功能

创作卡片上有三块区域:微电影创作、自由创作和拼图创作,用户分别点击这些不同的区域就能够进入图库应用对应的功能,快速开始内容创作。

2图库服务卡片方案设计1功能模块设计

下图展示了图库服务卡片与卡片使用方、系统卡片管理服务以及图库应用三者之间的逻辑关系。

图库服务卡片的核心数据包括:卡片ID、卡片类型、卡片内容ID、卡片内容类型,这些核心数据都需要从图库应用获取。

图库服务卡片通过系统卡片管理服务将卡片内容呈现到卡片使用方,例如桌面。

桌面点击不同卡片的事件传递到了图库服务卡片内部的路由跳转模块,根据路由跳转匹配项,进入图库应用的图片选择、图片浏览、内容创作等功能。

2与DevEco Studio中卡片模板的关系图库服务卡片是基于HarmonyOS服务卡片模板开发。在DevEco Studio中选择了一个服务卡片模板,即可以快速实现一个具备基本功能的服务卡片,图库服务卡片在图库卡片模板基础上重新实现了相册卡片控制器(AlbumCardControllerlmpl)和创作卡片控制器(DiscoveryCardControllerlmpl),配合自定义的UI和业务逻辑,使得卡片服务得到完整的实现。

卡片控制器是实现卡片功能和行为的关键类。我们可以看到服务卡片模板的核心类图与图库服务卡片的核心类图高度相似。因此这里也推荐大家持续关注华为定期发布的各种HarmonyOS服务卡片模板,基于合适的服务卡片模板开发可以提升开发效率。

3图库服务卡片关键功能实现我们将从路由跳转设计、深浅色模式适配和显示图片这三个关键功能点来展开对于图库服务卡片实现的说明。1路由跳转设计用户点击相册卡片和创作卡片分别能跳转到图库应用的不同界面。

我们看一下代码中相册卡片和创作卡片的UI层事件定义。

相册卡片的UI上有个swipper组件,它的onclick属性关联了一个index.json中的routerEvent,这个routerEvent配置了一个jumpToSinglePhoto的action,其目标Ability是SpringBoardAbility。

创作卡片UI内有一个div组件,它的onclick属性关联了一个index.json中的routerCreateCollages,这个routerCreateCollages配置了一个jumpToCreateColleges的action,其目标Ability同样是SpringBoardAbility。

而SpringBoardAbility.java文件中的onStart函数中的入参intent,可以解析出不同的action,根据不同的action值,我们完成了不同功能Ability的跳转,例如跳转到图片浏览或者内容创作。这种UI和功能路由解耦的实现方式,一方面减少了卡片UI层对图库应用具体功能的逻辑依赖,另一方面也有利于后续卡片功能扩展和维护。2深浅色模式适配如下图所示,系统进入深色模式,创作卡片底色就是深色,系统进入浅色模式,创作卡片底色就变成浅色。

24181560-f3a9-11eb-9bcf-12bb97331649.png

创作卡片的Index.hml文件的div组件中,有一个样式的定义—row_layout。在index.css文件中对其有深色模式、浅色模式的两套定义。media这个注解中的dark-mode参数依据系统当前显示模式进行判定,如果是系统进入深色模式dark-mode为true,row_layout的样式值就是左边这一套,反之就是右边这一套。以此实现UI对系统深浅色模式的动态适配。

2511b692-f3a9-11eb-9bcf-12bb97331649.png

3显示图片内容图库应用图标上滑后卡片内容呼出时的样子。

在卡片呼出时,即FormAbility的onCreateForm回调被调用,我们发起了卡片内容获取任务,即去图库应用查找当前卡片应该显示的图片,获取图片内容,并将图片内容更新到卡片界面上。这个任务我们采用异步线程的运行方式,没有在onCreateForm中直接返回封装卡片内容的ProviderFormInfo对象,是为了防止查询和解码图片过程的耗时导致卡片本身加载显示缓慢。

26518ac8-f3a9-11eb-9bcf-12bb97331649.png

按照规则,图库的相册卡片上滑呼出时,默认会使用相机相册中的首张图片作为卡片封面。我们根据相机相册的id,获取相机图库路径信息Uri,再根据Uri查询到相机相册内的一批图片信息列表,并将图库列表中首张图信息作为返回值。如果当前图库为空,那么将对图库卡片设置一张默认的图片作为卡片封面。

2679d0aa-f3a9-11eb-9bcf-12bb97331649.png

根据图片路径信息Uri,开始计算图片解码参数。考虑到用户图片不同高宽比和大小不一的情况,在不同尺寸的相册卡片上,图片显示不能变形,不能加载超大的原图显示到卡片上影响加载效率。因此就要做一些图片解码参数的计算与设置,例如:计算图片降采样率计算,图片裁剪区域设置,和不同图片旋转方向的图片高宽缩放设置。完成相关的解码参数计算和设置之后,就能通过界面接口(imageSource.createPixelmap)获得图片pixelMap对象。

2733e288-f3a9-11eb-9bcf-12bb97331649.png

接着把pixelMap对象按照如下代码打包,得到一个图像字节数组。至此卡片所需的图片内容准备完毕。

276eb3a4-f3a9-11eb-9bcf-12bb97331649.png

在将图像字节数组更新显示到UI界面前,要做一次数据封装,把字节数组封装到FormBindingData对象中。首先在zsonObject中设置图片的url,然后将图片字节流通过addImageData直接添加到FormBindingData对象中,这里我们可以看到url和字节流通过图片名称关联了起来。

27973bf8-f3a9-11eb-9bcf-12bb97331649.png

27ef969a-f3a9-11eb-9bcf-12bb97331649.png

最终将已经封装了图片信息的FormBindingData对象通过ability的updateForm方法推送给UI层,UI层的image组件解析到image字段就能获取图片的url信息,进而通过图片的url信息获得图片的字节流,最终完成图片内容的界面显示。

2806bffa-f3a9-11eb-9bcf-12bb97331649.png

4服务卡片开发建议

问题场景一:

桌面创建了多个卡片,切换系统语言后,快速返回桌面,桌面进程重启,用户看到卡片一个一个慢慢显示。

问题原因:

onCreateForm方法中有耗时操作,影响了卡片加载速度。

解决办法:

避免在服务卡片生命周期回调中出现耗时操作。

问题场景二:

当桌面在后台时,相册卡片不显示,但图片内容(旋转或其他编辑动作)发生变化,卡片应用主动调用Ability的updateForm方法无法及时更新卡片内容。

问题原因:

当桌面在后台时,界面绘制任务暂停,卡片提交的内容更新不会及时响应处理。

解决办法:

在卡片生命周期的onUpdateForm方法中调用Ability的updateForm方法更新卡片最新内容,如下图所示:

29192644-f3a9-11eb-9bcf-12bb97331649.png

读完了这个基于华为图库服务卡片开发实践,是不是让你对于卡片开发有了更深刻的认识

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 华为
    +关注

    关注

    215

    文章

    34294

    浏览量

    251172

原文标题:一文带你读懂华为图库服务卡片是如何实现的

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)习惯推荐方案概述

    视频续播为例,系统预测当前用户使用华为视频的播放视频功能概率较高,会选择用户最近观看且还没看完的视频内容来补充功能细节,在小艺建议中以模板卡形式推荐展示,用户点击卡片后,实现一步跳转进应用的视频播放页
    发表于 11-19 17:59

    HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)事件推荐开发者测试

    (service-events/notify)接口,将用户航班事件推送至华为云,接口响应成功。 卡片渲染:点击桌面上的小艺建议卡片中任意服务,然后返回桌面,会触发小艺建议
    发表于 11-18 17:39

    鸿蒙原生开发手记:02-服务卡片开发

    介绍 服务卡片是一直桌面小组件,可以放置在桌面上等位置,一触即达。 服务卡片分为静态卡片和动态卡片
    发表于 11-14 17:48

    HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)事件推荐接入方案

    一、方案概述 当开发者有事件想要通知到用户时,可通过应用/元服务的云侧服务器向智慧分发平台推送事件内容(意图共享)。系统通过智慧决策判断事件发生的条件,在满足条件时,向用户推荐事件提醒卡片,当用
    发表于 11-14 15:26

    HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)本地搜索方案概述

    一、概述 本地搜索是在HarmonyOS归一化搜索特性,开发者将应用/元服务内的功能和内容通过意图框架共享到HarmonyOS,即可实现“一步搜索,内容直达”。 二、典型场景 以“音乐垂域”的“歌曲
    发表于 11-06 10:59

    ATMEL原理图库

    ATMEL原理图库
    发表于 09-27 11:49 0次下载

    服务体验-服务管理与分享

    服务管理 通过桌面、负一屏、应用市场、元服务等场景对元服务进行添加、收藏、移除等管理操作。 服务分享 元服务
    发表于 07-16 15:43

    AIGC系统中聊天小助手卡片小组件嵌套设计实践

    1.项目描述 领航者卡片样式较多,有些卡片比较近似;可以用嵌套方案,实现一个卡片,多个子单元 可拔插组件式卡片。 2.逻辑设计 2.1
    的头像 发表于 06-12 11:20 782次阅读
    AIGC系统中聊天小助手<b class='flag-5'>卡片</b>小组件嵌套设计实践

    OpenHarmony开发案例:【电影卡片

    基于元服务卡片的能力,实现带有卡片的电影应用,介绍卡片的开发过程和生命周期实现
    的头像 发表于 04-15 17:53 1224次阅读
    OpenHarmony开发案例:【电影<b class='flag-5'>卡片</b>】

    OpenHarmony开发案例:【计步器卡片

    基于Stage模型实现带有卡片的计步应用,用于介绍卡片的开发及生命周期实现
    的头像 发表于 04-15 09:22 668次阅读
    OpenHarmony开发案例:【计步器<b class='flag-5'>卡片</b>】

    鸿蒙OS实战开发:【多设备自适应服务卡片

    服务卡片的布局和使用,其中卡片内容显示使用了一次开发,多端部署的能力实现多设备自适应。 用到了卡片扩展模块接口,[@ohos.app.
    的头像 发表于 04-09 09:20 824次阅读
    鸿蒙OS实战开发:【多设备自适应<b class='flag-5'>服务</b><b class='flag-5'>卡片</b>】

    鸿蒙OS开发实例:【手撸服务卡片

    服务卡片指导文档位于“**开发/应用模型/Stage模型开发指导/Stage模型应用组件**”路径下,说明其极其重要。本篇文章将分享实现服务卡片
    的头像 发表于 03-28 22:11 1150次阅读
    鸿蒙OS开发实例:【手撸<b class='flag-5'>服务</b><b class='flag-5'>卡片</b>】

    鸿蒙原生应用元服务实战-Serverless华为账户认证登录需尽快适配

    一、ArkTS\\\\API9,服务器端基于serverless开发的应用与元服务华为账号注册登录功能暂时是不支持的 二、3月1日后的审核要求 3月1日的时间是快到了。 三、会导致的结果
    发表于 02-20 10:14

    鸿蒙HarmonyOS元服务-“文学素养”说明

    、基于3.1 Release、API9进行开发,并使用了serverless端云一体化的注册登录模块;主要使用了元服务、万能卡片的创新能力,实现了快照功能等。具体包括元服务、万能
    发表于 01-10 10:11

    HarmonyOS开发案例分享:万能卡片也能用来玩游戏

    时候我跟别人解释什么是万能卡片,都会这么说:\"万能卡片实现让你在不用打开 app 的前提下,在桌面上就能使用到相关服务\"。有一天,我的朋友跟我说,既然可以体验到各种
    发表于 12-01 09:35