# 鸿蒙 HarmonyOS 应用开发实战(第33期)|喝水提醒(Water Reminder)— 可视化水杯与进度动画
一、应用概述喝水提醒Water Reminder是一款健康辅助类应用帮助用户记录每日饮水量并以可视化水杯的形式直观展示饮水进度。用户每点击一次「喝一杯」按钮水杯中的水位就会上升一格同时显示累计饮水量毫升和鼓励性文字提示。从健康角度看每日饮用 8 杯水约 2000ml是广为流传的健康建议。该应用以此为目标通过视觉反馈和正向鼓励两个心理机制激励用户达成每日饮水目标。从技术角度看这是一个展示Stack 层叠中动态高度变化、条件文字渲染和响应式布局的绝佳案例。二、技术架构与组件树2.1 整体架构Entry Component struct index33 ├── Column (根容器) │ ├── Row (顶部导航栏) │ └── Column (主内容区, 居中) │ ├── Text (目标: 8 杯) │ ├── Stack (水杯可视化) │ │ ├── Column (水杯容器, 180×200, 圆角边框) │ │ │ └── Column (水位填充, 动态高度) │ │ └── Column (水杯文字叠加层) │ │ ├── Text () │ │ └── Text ({count}/{target}) │ ├── Text ({totalMl}ml / {target*glassSize}ml) │ ├── Text (鼓励语, 条件变化) │ ├── Button ( 喝一杯) │ └── Row (辅助按钮) │ ├── Button (重置) │ └── Button (目标)2.2 状态变量设计State count: number 0; // 已饮杯数 State target: number 8; // 日目标杯数 State glassSize: number 200; // 每杯毫升数三个State变量构成了应用的全部状态。其中glassSize被标记为State虽然当前未通过 UI 修改它但保留为状态变量意味着未来可以轻松添加用户自定义杯量功能。三、核心代码深度解析3.1 喝水逻辑与边界保护addWater() { if (this.count this.target) { this.count; } }addWater()方法包含明确的边界检查只有当前杯数小于目标杯数时才递增。这防止了用户过度点击导致进度超过 100% 的异常情况。当count target时点击按钮不再产生任何效果——这是一种软锁止设计比禁用按钮更温和用户仍然可以感受到点击反馈。3.2 计算属性进度、水量与鼓励语get progress(): number { return (this.count / this.target) * 100; } get totalMl(): number { return this.count * this.glassSize; } get encouragement(): string { if (this.count this.target) return 达标了很棒; if (this.count this.target * 0.75) return 快达标了; if (this.count this.target * 0.5) return 继续加油; if (this.count this.target * 0.25) return 多喝点水; return 记得喝水; }三个计算属性将原始数据count、target转化为用户友好的显示信息progress以百分比形式返回进度值可用于替代传统的环形进度条totalMl根据杯数和杯量计算总毫升数encouragement基于不同进度区间返回不同的鼓励文字配合对应的 emoji 表情鼓励语的区间设计合理在 0%、25%、50%、75%、100% 五个关键节点切换文字避免了过于频繁的变化也让用户在每个进步阶段都能获得正向反馈。3.3 水杯可视化——Stack 层叠的核心Stack() { // 水杯背景和动态水位 Column() { Text().width(160) .height(this.count 0 ? 160 * (this.count / this.target) : 0) .backgroundColor(#4FC3F7) .borderRadius({ bottomLeft: 20, bottomRight: 20 }) .alignSelf(ItemAlign.Center) } .width(180).height(200).backgroundColor(#E1F5FE) .borderRadius(20).justifyContent(FlexAlign.End) .border({ width: 3, color: #81D4FA }) // 水杯上的文字叠加 Column() { Text().fontSize(24) Text(${this.count}/${this.target}).fontSize(16) .fontWeight(FontWeight.Bold).fontColor(#0277BD) } .width(100%).height(100%) .justifyContent(FlexAlign.Center) .alignItems(HorizontalAlign.Center) }水杯渲染的核心逻辑分为两层第一层杯体 水位外层 Column 代表整个水杯180×200使用#E1F5FE极浅蓝色作为空杯颜色borderRadius(20)创建圆角杯体border添加 3px 的边框模拟玻璃质感。内层 Column 代表水位它的height根据count/target比例动态计算160 * (this.count / this.target)。当count 0时高度为 0——水杯看起来是空的。这里有一个重要的布局细节外层 Column 设置了justifyContent(FlexAlign.End)这意味着内层水位 Column 会从底部开始排列。结合alignSelf(ItemAlign.Center)让水位水平居中水的填充效果就是从杯底逐渐上升到杯顶——完美模拟了真实倒水的视觉效果。borderRadius({ bottomLeft: 20, bottomRight: 20 })为水位底部添加圆角与水杯的底部圆角匹配。水位顶部是平的这与真实透明玻璃杯中水的视觉效果一致。第二层文字叠加第二个 Column 使用position叠加在水杯之上Stack 的特性显示 表情和count/target计数。justifyContent(Center)和alignItems(Center)确保文字在杯体中央显示。3.4 激励按钮与辅助操作Button( 喝一杯).width(200).height(56).borderRadius(28) .backgroundColor(#4FC3F7).fontSize(22).margin({ top: 12 }) .onClick(() this.addWater()) Row({ space: 8 }) { Button(重置).width(90).height(40).borderRadius(20) .backgroundColor(#9E9E9E) .onClick(() { this.count 0 }) Button(目标).width(90).height(40).borderRadius(20) .backgroundColor(#FF9800) .onClick(() { this.target }) }.margin({ top: 8 })三个按钮的设计体现了清晰的信息层级主按钮「 喝一杯」最大的尺寸200×56最醒目的颜色蓝色系是用户最频繁的操作次按钮「重置」中等大小灰色用于重置杯数次按钮「目标」橙色用于增加每日目标「目标」按钮允许用户灵活调整目标——如果某天想多喝水可以增加目标杯数。但需要注意的是当前版本没有「目标-」按钮这可以作为一个改进点。四、HarmonyOS 特性分析4.1 动态高度的响应式渲染本例最值得关注的技术点是基于State的动态高度变化。当count递增时.height(this.count 0 ? 160 * (this.count / this.target) : 0)ArkTS 的响应式系统会自动重新计算高度值并重新渲染。这种数据驱动高度的模式适用于进度条/进度环可伸缩面板加载动画数据可视化的柱状图4.2 borderRadius 的精细控制.borderRadius({ bottomLeft: 20, bottomRight: 20 })ArkTS 的borderRadius支持对象参数可以对四个角分别设置圆角值。这是 CSS 中border-radius的增强版本比传统的四值简写更直观。4.3 语义化颜色系统应用使用了统一的蓝色系配色背景#E1F5FE极浅蓝水位#4FC3F7中蓝与主按钮一致边框#81D4FA浅蓝文字#0277BD深蓝这种单色系设计让视觉风格高度统一用户看到蓝色系就能联想到水的主题。在 HarmonyOS 中颜色值支持六位十六进制#RRGGBB或八位#AARRGGBB格式。五、UI/UX 设计与最佳实践5.1 视觉反馈的心理学应用应用的核心理念是通过即时视觉反馈激励用户行为水位上升的满足感每次点击蓝色水位都会增高这种可视化的进步给人成就感计数实时更新水杯中央的count/target数字实时变化鼓励语的阶段性变化从「记得喝水」到「达标了很棒」五种文字对应五个进步阶段5.2 交互反馈的细节按钮溢出保护当达到目标后点击主按钮无效而不是报错温和的视觉风格圆角按钮、柔和的蓝色系、大号字体给人友好的感觉重置安全重置仅清空杯数count不影响目标target和杯量glassSize避免用户误操作导致所有设置丢失5.3 无障碍设计建议对于喝水提醒这类高频使用的健康应用建议增加系统通知提醒通过ohos.notification定时发送喝水通知振动反馈每次喝水时提供短暂振动语音播报鼓励语通过 TTS 语音读出来六、可扩展思路历史记录与统计使用ohos.data.preferences持久化每日饮水数据显示周/月趋势图。自定义杯量允许用户设置不同的杯量如 250ml、300ml适配不同水杯。定时提醒利用后台任务定时发送喝水通知每隔 1-2 小时提醒一次。多主题支持不同的水杯样式和背景主题增加趣味性。喝水挑战加入连续达标天数的统计用游戏化方式激励用户。七、总结喝水提醒应用以 83 行简洁代码实现了一个完整的健康追踪工具。它的核心价值在于Stack 层叠实现复杂视觉水杯 水位 文字的叠加展示了 Stack 在可视化组件中的强大能力动态高度驱动进度显示用State控制 Column 高度替代了传统的 Progress 组件计算属性简化业务逻辑progress、totalMl、encouragement三个 getter 将原始数据转化为展示信息正向激励设计通过鼓励语和可视化进度利用心理学原理帮助用户养成好习惯这个应用的代码模式——状态驱动的动态尺寸变化 层叠布局的可视化——可以轻松复用到电池电量显示、存储空间指示器、技能升级条等场景。下一期我们将继续健康主题探讨一个更具互动性的应用——计步器Pedometer学习如何使用Progress的环形样式和Ring类型打造精美的运动数据看板。本文是 HarmonyOS 应用开发实战系列第 33 期更多内容请关注专栏。

相关新闻

Spring Boot集成Google Authenticator实现两步验证:从原理到实战

Spring Boot集成Google Authenticator实现两步验证:从原理到实战

1. 项目概述:为什么你的Spring Boot应用需要两步验证?最近在给一个内部管理系统做安全加固,客户提了个很实在的要求:登录时除了密码,能不能再加一道锁?这个需求背后,是大家对账号安全越来越高的…

2026/7/30 7:43:16 阅读更多 →
AI编程助手如何提升开发效率:实践与量化分析

AI编程助手如何提升开发效率:实践与量化分析

1. 智能编码革命的技术本质当我在2022年首次使用GitHub Copilot完成一个完整的微服务模块时,那种震撼感至今难忘——原本需要3天编写的CRUD接口,在AI辅助下仅用4小时就完成了初版。这不仅仅是效率的提升,更标志着软件开发范式正在发生根本性变…

2026/7/30 7:43:16 阅读更多 →
AI 赋能行业的趋势预判:哪些传统业务场景将在下半年迎来爆发式智能化

AI 赋能行业的趋势预判:哪些传统业务场景将在下半年迎来爆发式智能化

AI 赋能行业的趋势预判:哪些传统业务场景将在下半年迎来爆发式智能化 一、行业智能化的"渗透率阶梯":从技术可行到商业可行 AI 赋能传统行业不是"所有行业同步进行",而是沿着一条清晰的"渗透率阶梯"逐步推进…

2026/7/30 7:43:16 阅读更多 →

最新新闻

第八章多类型语言系统8.1 商业文章系统(Business Article Engine)

第八章多类型语言系统8.1 商业文章系统(Business Article Engine)

第八章多类型语言系统8.1 商业文章系统(Business Article Engine)WSaiOS商业文章系统负责处理具有明确业务目标的结构化内容。商业文章的特点:信息目标明确内容结构稳定需要体现行业知识需要符合用户阅读目的WSaiOS通过:主题分析 …

2026/7/30 8:01:21 阅读更多 →
第九章 逻辑验证工程 9.1 Logic Validation Engine(逻辑验证引擎)

第九章 逻辑验证工程 9.1 Logic Validation Engine(逻辑验证引擎)

第九章逻辑验证工程9.1 Logic Validation Engine(逻辑验证引擎)语言表达完成后,并不代表内容一定正确。WSaiOS认为:语言输出必须经过逻辑验证,确保概念正确、关系合理、时间一致、内容连续。因此建立:Logic…

2026/7/30 8:01:21 阅读更多 →
Python自动化双语字幕处理:从解析、翻译到合并的完整工作流

Python自动化双语字幕处理:从解析、翻译到合并的完整工作流

在实际处理视频字幕时,很多开发者或内容创作者会遇到一个典型痛点:原始字幕文件格式混乱、时间轴不准,或者需要快速生成双语对照版本。手动调整不仅耗时,而且容易出错。一个自动化、可配置的双语字幕处理工作流,能显著…

2026/7/30 8:01:21 阅读更多 →
BWorkflow-V2:人 + Coding Agent的软件研发落地工作流

BWorkflow-V2:人 + Coding Agent的软件研发落地工作流

自从用上 Fable 5、K3 这些更强的大模型,我就在琢磨:BWorkflow-V1 是不是太"重"了?v1 的思路是把大量规则约束架在 Agent 之上,构成一层"流程 harness"——技术 harness 管 Agent 怎么跑得动,流程…

2026/7/30 8:01:21 阅读更多 →
风力涡轮机故障检测:SVM算法与Simulink仿真实践

风力涡轮机故障检测:SVM算法与Simulink仿真实践

1. 项目概述:风力涡轮机故障检测的工程挑战风力发电机组作为清洁能源的核心设备,其运行稳定性直接影响电网安全。我在参与某2.5MW机组运维项目时,曾遇到齿轮箱温度异常升高导致紧急停机的案例,事后分析发现故障信号在早期已被传感…

2026/7/30 8:01:21 阅读更多 →
React 18 核心概念与 Hooks 实战:从声明式 UI 到高效开发

React 18 核心概念与 Hooks 实战:从声明式 UI 到高效开发

1. 从“学不动了”到“快速上手”:为什么React值得你投入 前端圈子里总流传着“学不动了”的调侃,框架、工具链更新迭代的速度确实让人眼花缭乱。但如果你问我,在众多选择中,哪一个是最值得投入时间、能让你构建现代Web应用能力产…

2026/7/30 8:00:21 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻