发布时间:2026/7/12 9:02:02
HarmonyOS运动健康——运动记录与统计概览页面
进度页面是运动健康App的数据汇总页。用户从首页点击运动记录或底部导航进度跳转到这里查看本周的运动数据和统计概览。这个页面的任务是把散落在各处的运动数据步数、卡路里、时长、次数汇总成直观的图表和数字让用户一眼看到我这周运动了多少。页面结构分为两部分上方的本周活动柱状图和下方的统计概览卡片。柱状图展示每天的趋势变化统计卡片展示累计总量。从趋势到总量信息从细节到宏观。完整效果柱状图的实现数据源和渲染Text(本周活动).fontSize(17).fontWeight(FontWeight.Bold).fontColor(T1) .width(100%).padding({ left: 16 }).margin({ bottom: 12 }) Row() { ForEach(WEEKLY_DATA, (day: ActivityRecord) { Column() { Column() {}.width(28).height(day.calories / 15).borderRadius(14) .linearGradient({ angle: 180, colors: [[A, 0], [#FF9F43, 1]] }) Text(day.calories.toString()).fontSize(10).fontColor(T2).margin({ top: 6 }) Text(day.date).fontSize(10).fontColor(T3) }.alignItems(HorizontalAlign.Center).layoutWeight(1) }) }.width(100%).height(120).padding({ left: 16, right: 16 }) .alignItems(VerticalAlign.Bottom).margin({ bottom: 20 })柱状图用ForEach渲染七天的数据每天是一个Column柱子卡路里数值日期。柱子高度的缩放系数.width(28).height(day.calories / 15).borderRadius(14)柱子宽度28px高度由day.calories / 15计算。和首页的柱状图对比属性首页进度页柱子宽度22px28px高度计算calories / 20calories / 15圆角11px宽度一半14px宽度一半区域高度100px120px进度页的柱子更宽28 vs 22、更高除以15 vs 除以20、区域更大120 vs 100。这是因为进度页是专门的数据展示页有更多空间给柱状图。首页的柱状图是预览进度页的柱状图是详情——同一个图表在不同页面的尺寸不同符合信息层级。除以15意味着最大卡路里值不能超过1800120×15否则柱子会溢出区域。首页除以20的最大上限是2000100×20。两个页面的上限不同但都没有做动态计算。底部对齐.alignItems(VerticalAlign.Bottom)Row的alignItems(VerticalAlign.Bottom)让所有柱子底部对齐——矮柱子在上面高的柱子在下面。这是柱状图的标准对齐方式底部代表零。柱子上方的数值Text(day.calories.toString()).fontSize(10).fontColor(T2).margin({ top: 6 })每个柱子上方显示卡路里数值10px灰色。margin({ top: 6 })在柱子和数值之间留6px间距。数值是固定的——直接显示WEEKLY_DATA中的calories值。统计概览卡片2×2 网格布局Text(统计概览).fontSize(17).fontWeight(FontWeight.Bold).fontColor(T1) .width(100%).padding({ left: 16 }).margin({ bottom: 12 }) Row({ space: 10 }) { this.SCard(总步数, 76,532, 本周, A) this.SCard(总消耗, 3,660, 千卡, #FF9F43) }.width(100%).padding({ left: 16, right: 16 }).margin({ bottom: 10 }) Row({ space: 10 }) { this.SCard(运动时长, 295, 分钟, #5DADE2) this.SCard(训练次数, 16, 次, #00B894) }.width(100%).padding({ left: 16, right: 16 })四个统计卡片分成两行每行两个。用两个Row实现2×2网格而不是用Grid或Flex-wrap。原因是ArkUI的Grid组件需要指定列数和行列间距对于简单的2×2布局来说太重了。两个Row更直观——每个Row放两个卡片space: 10控制卡片间距。SCard BuilderBuilder SCard(label: string, value: string, unit: string, color: string) { Column() { Text(value).fontSize(28).fontWeight(FontWeight.Bold).fontColor(color) Text(unit).fontSize(11).fontColor(T3).margin({ top: 4 }) Text(label).fontSize(12).fontColor(T2).margin({ top: 4 }) }.layoutWeight(1).padding(16).backgroundColor(#FFFFFF).borderRadius(16) .shadow({ radius: 4, color: rgba(0,0,0,0.03), offsetY: 1 }) }每个统计卡片由三行文字组成数值28px加粗彩色、单位11px灰色、标签12px灰色。数值最醒目单位和标签视觉层级较低。layoutWeight(1)让两个卡片均分Row的宽度。padding(16)给卡片内部留白避免文字紧贴边框。backgroundColor(#FFFFFF)白色背景borderRadius(16)圆角shadow轻微阴影和首页的训练卡片风格一致。四个统计指标的含义指标数值单位颜色含义总步数76,532本周红色(A)一周累计步数总消耗3,660千卡橙色(#FF9F43)一周累计卡路里消耗运动时长295分钟蓝色(#5DADE2)一周累计运动时间训练次数16次绿色(#00B894)一周训练次数四个颜色和首页的数据环一致红色步数橙色卡路里蓝色运动时间绿色训练次数。颜色体系在不同页面之间保持统一用户看到红色就联想到步数不管在哪个页面。数据的硬编码问题四个统计值76532、3660、295、16是硬编码的字符串不是从WEEKLY_DATA动态计算的。如果把WEEKLY_DATA七天的卡路里加起来和3660对不上。这意味着柱状图和统计卡片展示的是假数据——柱状图来自真实数据源统计卡片是静态写死的。实际项目中应该动态计算const totalCalories WEEKLY_DATA.reduce((sum, day) sum day.calories, 0) const totalSteps WEEKLY_DATA.reduce((sum, day) sum day.steps, 0)但原型阶段硬编码够用——页面布局和交互逻辑已经验证了数据对接是后续的工作。页面的数据流ProgressPage没有State变量——它不需要响应式渲染。数据来自WEEKLY_DATA导入的常量和硬编码的统计值。用户在这个页面只能看不能操作没有筛选、排序、编辑功能。这种纯展示页面的实现最简单——不需要状态管理不需要事件处理只需要把数据渲染成UI。但缺点是数据不实时——如果用户刚跑完步步数不会自动更新。实际项目中应该在onPageShow中刷新数据。和首页柱状图的复用首页和进度页都有柱状图代码几乎一样——都是ForEach渲染WEEKLY_DATA每天一个Column。区别在于尺寸和样式首页柱子更窄22px vs 28px区域更小100px vs 120px。这两个柱状图没有抽成公共组件——每个页面各自实现了一遍。如果以后要修改柱状图的样式比如加动画、改颜色需要改两个地方。更好的做法是抽成一个Builder WeeklyChart(height: number, barWidth: number)两个页面调用时传入不同参数。但原型阶段的重复是可以接受的——先验证布局再优化代码结构。过早抽象反而会增加理解成本。踩坑记录柱状图高度溢出。day.calories / 15的系数15是硬编码的。如果某天卡路里超过1800120×15柱子高度会超过区域高度和其他柱子重叠。首页用20作为系数上限是2000。两个页面的上限不同但都没有做动态计算或上限截断。2×2网格的间距不均。两个Row各自有space: 10但Row之间没有设置间距——第二行紧贴第一行。实际上有margin({ bottom: 10 })在第一个Row下方但第二个Row没有margin。如果卡片高度不一致比如数值长度不同导致文字换行两行之间可能出现不对齐。SCard的layoutWeight。两个SCard都用layoutWeight(1)均分宽度。如果以后要改成三个卡片一行需要把layoutWeight和Row的space配合调整。三个卡片时space需要减小否则间距太大。统计值的数字格式。76532显示为76,532——有千位分隔符。但这个分隔符是硬编码在字符串里的不是动态格式化的。实际项目中应该用数字格式化totalSteps.toLocaleString()。但鸿蒙的toLocaleString支持可能不完整需要测试。柱状图的触摸反馈。柱子没有绑定onClick——用户不能点击某个柱子查看当天的详细数据。如果要加交互需要在ForEach的Column上绑定onClick传入day参数跳转到当天的详情页。进度页面的核心价值是数据可视化——把一周的运动数据变成柱状图和统计卡片。柱状图展示趋势哪天运动多、哪天运动少统计卡片展示总量一共运动了多少。两个维度互补——趋势告诉用户哪天偷懒了总量告诉用户整体表现如何。颜色体系和首页保持一致用户不需要重新学习红色代表什么。

相关新闻

HarmonyOS运动健康——训练页面交互与动作详情
2026/7/12 9:02:02

HarmonyOS运动健康——训练页面交互与动作详情

从训练页面点击一个动作,跳转到动作详情页。这个流程涉及两个页面的数据传递和交互衔接:WorkoutPage负责展示动作列表和训练计划选择,ExerciseDetail负责展示单个动作的完整信息。两个页面通过路由参数连接——WorkoutPage传入动作ID&#xf…

阅读更多
Unity图集打包冗余:内存暴涨的根源分析与根治方案
2026/7/12 9:02:02

Unity图集打包冗余:内存暴涨的根源分析与根治方案

1. 项目概述:当你的游戏内存悄然“膨胀”如果你是一名Unity开发者,尤其是负责过UI模块或者2D项目,那么“内存暴涨”这个词很可能让你心头一紧。在项目开发中后期,特别是资源整合与打包阶段,一个隐蔽却致命的问题常常浮…

阅读更多
UE5 VR一体机开发环境搭建:从Android配置到打包部署全流程实战
2026/7/12 9:02:02

UE5 VR一体机开发环境搭建:从Android配置到打包部署全流程实战

1. 项目概述:为什么UE5 VR一体机开发是个“技术深水区”?如果你是一名游戏开发者或者数字孪生领域的从业者,最近想把项目从PC VR搬到VR一体机上,大概率会第一时间想到虚幻引擎5(UE5)。毕竟,它的…

阅读更多
2025年自动驾驶算法工程师实战指南:L2/L3落地关键链路拆解
2026/7/12 10:02:02

2025年自动驾驶算法工程师实战指南:L2/L3落地关键链路拆解

1. 这不是职业展望,而是一份2025年自动驾驶算法工程师的实操日志“一个普通自动驾驶算法工程师的2025年”——这个标题里没有宏大叙事,没有技术布道,也没有PPT式的职业规划。它就是一张被咖啡渍洇湿的工位便签,上面记着昨天调试失…

阅读更多
华为云 CodeArts Req 敏捷实战:3步完成凤凰商城 Epic 到 Task 的思维导图规划
2026/7/12 10:02:02

华为云 CodeArts Req 敏捷实战:3步完成凤凰商城 Epic 到 Task 的思维导图规划

华为云CodeArts Req敏捷实战:3步构建凤凰商城需求分解思维导图 在电商项目快速迭代的开发节奏中,如何将宏观的商业需求精准拆解为可执行的技术任务,是每个敏捷团队面临的挑战。华为云CodeArts Req的思维导图规划功能,通过可视化的…

阅读更多
Node.js 18 + node-gyp 10.3.0 Windows 11 环境配置:3步解决 Visual Studio 未找到错误
2026/7/12 10:02:02

Node.js 18 + node-gyp 10.3.0 Windows 11 环境配置:3步解决 Visual Studio 未找到错误

Node.js 18 node-gyp 10.3.0 Windows 11 环境配置终极指南 当你在Windows 11上尝试构建Node.js原生模块时,是否曾被 msvs_version not set 错误拦住了脚步?这个问题困扰着无数开发者,特别是当你使用较新的Node.js 18和node-gyp 10.3.0组合…

阅读更多
四足机器人价格对比:宇树B2与云深处X20的全周期价值拆解
2026/7/12 10:02:02

四足机器人价格对比:宇树B2与云深处X20的全周期价值拆解

1. 项目概述:四足机器人市场里的“性价比”之争,到底在比什么?“跟宇树一比,云深处太贵了?”——这句话最近在机器人爱好者群、高校实验室讨论组和工业自动化采购圈里反复刷屏。它不是一句简单的吐槽,而是当…

阅读更多
自动驾驶3D感知中匈牙利匹配的原理、实现与工程落地
2026/7/12 10:02:02

自动驾驶3D感知中匈牙利匹配的原理、实现与工程落地

1. 为什么3D感知里必须用匈牙利匹配——不是“选它”,而是“没得选”在自动驾驶感知系统里,你见过最让人抓狂的场景是什么?不是模型跑不起来,也不是显存爆了,而是训练时loss曲线明明一路往下走,mAP却卡在52…

阅读更多
HarmonyOS运动健康——运动记录与统计概览页面
2026/7/12 9:02:02

HarmonyOS运动健康——运动记录与统计概览页面

进度页面是运动健康App的数据汇总页。用户从首页点击"运动记录"或底部导航"进度"跳转到这里,查看本周的运动数据和统计概览。这个页面的任务是:把散落在各处的运动数据(步数、卡路里、时长、次数)汇总成直观的…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/12 0:01:57

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/12 0:01:57

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/12 0:01:57

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/12 0:01:57

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/12 0:01:57

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/12 0:01:57

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/11 9:29:01

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/11 9:29:01

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/11 9:29:01

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多