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

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

    关注

    218

    文章

    35800

    浏览量

    260758

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    服务发布准备工作

    发布元服务前,请详细了解华为应用市场的审核要求,并提前准备发布所需的文件、资源,以便您能顺利、快速通过发布审核流程。 仔细阅读元服务审核指南,了解发布元服务
    发表于 10-10 15:48

    HarmonyOSAI编程万能卡片生成(二)

    工程保存完成后,工程中会新增如下卡片相关文件: 自定义配置逻辑代码 逻辑代码包含实现卡片数据交互和卡片事件两类。 卡片数据交互:触发
    发表于 09-09 16:10

    HarmonyOSAI编程万能卡片生成(一)

    基于AI大模型理解开发者的卡片需求信息,通过对话式的交互智能生成HarmonyOS万能卡片工程。 使用约束 建议从以下维度描述卡片需求: 当前不支持在生成卡片预览图后继续描述需求进行增
    发表于 09-08 17:09

    HarmonyOS AI辅助编程工具(CodeGenie)卡片生成

    、 自定义配置逻辑代码 逻辑代码包含实现卡片数据交互和卡片事件两类。 卡片数据交互:触发卡片页面刷新。应用工程生成的
    发表于 08-12 11:04

    FA模型卡片和Stage模型卡片切换

    卡片切换 卡片切换主要包含如下三部分: 卡片页面布局:FA模型卡片和Stage模型卡片的布局都采用类web范式开发可以直接复用。
    发表于 06-06 08:10

    【HarmonyOS NEXT】华为分享-碰一碰开发分享

    关键词:鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit 华为分享新推出碰一碰分享,支持用户通过手机碰一碰发起跨端分享,可实现传输图片、共享wifi等。我们只需调用
    发表于 05-16 16:19

    华为服务器诊断工具

    华为服务器诊断工具,显示888首选
    发表于 04-14 14:08 0次下载

    鸿蒙应用元服务开发-Account Kit获取手机号

    Button实现了Account Kit快速验证功能: 约束与限制 元服务满足《常见类型移动互联网应用程序必要个人信息范围规定》(对第三方网站的内容,华为不承担任何责任)中使用手机号的必要业务场景
    发表于 04-08 16:14

    鸿蒙应用元服务开发-Account Kit获取华为账号用户信息概述

    如元服务需要完善用户头像信息,可通过调用Scenario Fusion Kit提供的选择头像Button,拉起Account Kit头像选择页面,供用户完成华为账号头像或其他头像的选择,实现头像信息
    发表于 04-02 11:10

    鸿蒙应用元服务开发-Account Kit概述

    Account Kit(华为账号服务)提供简单、快速、安全的登录功能,让用户快捷地使用华为账号登录元服务。用户授权后,Account Kit可提供头像、手机号码等信息,帮助元
    发表于 03-31 12:08

    华为支付-商户基础支付场景准备

    、平台类商户、服务华为支付收银台展示: 二、业务流程 开发者通过接入Payment Kit基础支付,可以简便快捷的实现应用的支付能力。具体接入流程如下: 1.商户客户端请求商户服务
    发表于 02-13 14:51

    华为支付-(可选)特定场景配置操作

    接口中allocationType字段实现,使用该字段前需商户侧与华为支付侧沟通(合作咨询可点击此处)后申请开通并配置分账能力。 分账相关操作参见分账交易管理。 涉及商户:直连商户、服务商、平台类商户 处理人:商户在
    发表于 01-21 10:30

    Payment Kit(华为支付服务)概述

    Payment Kit(华为支付服务)提供了方便、安全和快捷的支付方式,开发者在开发的商户应用/元服务中接入华为支付服务便捷且快速。 商户应
    发表于 01-20 16:17

    效率大升!AI赋能鸿蒙万能卡片开发

    万能卡片,作为鸿蒙生态应用和元服务的重要展示形式,凭借将关键信息和核心操作前置,实现服务直达、减少跳转层级的体验效果,备受用户和开发者青睐。但传统
    的头像 发表于 01-13 13:44 1390次阅读
    效率大升!AI赋能鸿蒙万能<b class='flag-5'>卡片</b>开发

    基于华为云人脸识别服务(FRS)开发体验

    这篇文章的内容主要介绍:华为云人脸识别服务(FRS)接口的使用过程。
    的头像 发表于 01-09 11:32 3461次阅读
    基于<b class='flag-5'>华为</b>云人脸识别<b class='flag-5'>服务</b>(FRS)开发体验