HarmonyOS应用开发实战:萌宠日记 - 心情分布 — 饼图与图例设计
HarmonyOS应用开发实战萌宠日记 - 心情分布 — 饼图与图例设计前言心情分布图是数据统计页面中展示情绪占比的核心图表。在萌宠日记的StatisticsPage中心情分布使用图例列表展示每种心情的占比左侧为饼图占位后续可替换为真实饼图组件右侧为颜色图例 百分比让用户直观了解心情分布情况。本文将从萌宠日记中心情分布图的实现出发深入解析图例设计、颜色语义、百分比计算以及饼图占位的布局。一、心情分布实现// StatisticsPage.ets — 心情分布数据interfaceMoodStat{label:string// 心情标签percentage:number// 百分比color:string// 颜色}privatemoodStats:MoodStat[][{label:开心,percentage:60,color:#FFD54F},{label:平静,percentage:20,color:#81C784},{label:一般,percentage:10,color:#FFB74D},{label:难过,percentage:5,color:#64B5F6},{label:生气,percentage:5,color:#E57373}]二、图例渲染// 心情分布卡片Column({space:12}){Text(心情分布).fontSize(16).fontWeight(FontWeight.Bold).fontColor(#333333).width(100%)Row({space:24}){// 饼图占位Column(){Text().fontSize(64)}.width(120).height(120).justifyContent(FlexAlign.Center)// 图例列表Column({space:8}){ForEach(this.moodStats,(stat:MoodStat){Row({space:8}){Circle().width(10).height(10).fill(stat.color)Text(stat.label).fontSize(13).fontColor(#666666).width(40)Text(${stat.percentage}%).fontSize(13).fontColor(#333333).fontWeight(FontWeight.Medium)}})}.alignItems(HorizontalAlign.Start)}.width(100%)}.width(100%).backgroundColor(#FFFFFF).borderRadius(16).padding(16).shadow({radius:4,color:#10000000,offsetY:2})三、图例颜色设计心情颜色色值寓意开心黄色#FFD54F快乐、阳光平静绿色#81C784平静、安宁一般橙色#FFB74D中性难过蓝色#64B5F6忧郁生气红色#E57373愤怒四、图例布局列组件内容第一列Circle颜色色块10×10第二列Text心情标签第三列Text百分比数值五、总结本文从萌宠日记的心情分布图实现出发深入解析了图例设计的完整方案数据模型MoodStat 接口图例渲染Circle 色块 标签 百分比颜色语义5 种心情对应 5 种颜色如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源Circle 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-circleRow 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-row7.1 属性对比属性类型必填默认值说明widthLength否100%组件宽度heightLength否自适应组件高度paddingPadding否0内边距marginMargin否0外边距backgroundColorColor否透明背景颜色borderRadiusLength否0圆角半径shadowShadow否无阴影效果6、常见问题与解决方案6.1 布局问题在实际开发中开发者经常会遇到布局相关的常见问题组件不显示检查是否设置了正确的宽高或父容器是否限制了子组件大小布局错乱检查alignItems和justifyContent设置是否正确滚动失效确认 Scroll 组件的高度是否被正确限制提示布局问题通常可以通过borderWidth: 1临时添加边框来定位问题区域。6.2 性能问题列表卡顿使用 LazyForEach 替代 ForEach 实现懒加载频繁刷新合理使用状态管理装饰器避免不必要的组件重绘内存泄漏在页面销毁时及时释放资源和取消订阅// 懒加载示例LazyForEach(this.dataSource,(item:DataItem){ListItem(){Text(item.name).fontSize(16)}},(item:DataItem)item.id.toString())7、最佳实践建议7.1 代码组织良好的代码组织可以显著提升项目的可维护性组件化设计将可复用的 UI 部分抽取为独立组件样式分离将常量和样式定义集中管理类型安全使用 interface 定义数据模型避免 any 类型7.2 性能优化减少不必要的重绘使用State时只声明需要响应式更新的变量合理使用布局避免过深的嵌套层级图片优化使用适当的图片格式和尺寸提示HarmonyOS 提供了一系列性能分析工具建议在开发过程中持续关注应用性能。8、与其他方案的对比8.1 方案对比对比维度本方案传统方案优势实现复杂度低中等更简洁维护成本低高更易维护扩展性好一般更灵活性能优秀良好更高效8.2 适用场景适合需要快速实现相关功能的场景不适合对性能有极致要求的场景需考虑其他方案总结本文从萌宠日记的实际开发案例出发深入解析了心情分布饼图与图例设计的实现方案。通过本文的学习读者可以掌握以下核心知识点组件用法理解相关 ArkUI 组件的核心属性和使用场景布局技巧掌握常见的布局模式及其适用范围交互实现学习点击事件、状态管理等交互设计方案最佳实践了解实际项目中的工程化实践和性能考量在实际开发中建议根据具体业务需求灵活调整组件参数和布局结构以达到最佳的用户体验效果。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源Text 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textColumn 容器https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-columnRow 容器https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-rowScroll 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-scrollTabs 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-tabsNavigation 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-navigationGrid 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-gridList 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-listTextInput 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textinputTextArea 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textarea6.1 完整示例代码以下是一个完整的实际应用示例展示了相关组件的综合使用// 完整的组件使用示例Componentexportstruct DemoComponent{Statemessage:stringHello HarmonyOSStatecount:number0build(){Column({space:16}){Text(this.message).fontSize(24).fontWeight(FontWeight.Bold).fontColor(#333333)Text(点击次数:${this.count}).fontSize(16).fontColor(#666666)Button(点击增加).fontSize(16).fontColor(Color.White).backgroundColor(#F5A623).borderRadius(20).onClick((){this.count})}.width(100%).height(100%).padding(24).backgroundColor(#FFF8F0)}}6.2 状态管理代码// 状态管理示例StateisActive:booleanfalseProptitle:stringLinksharedValue:numberbuild(){Column(){Text(this.title).fontSize(18).fontColor(this.isActive?#F5A623:#999999)Button(this.isActive?取消:激活).onClick((){this.isActive!this.isActive})}}6.3 数据绑定与渲染// ForEach 循环渲染示例interfaceDataItem{id:numbername:stringicon:string}StatedataList:DataItem[][{id:1,name:示例一,icon:⭐},{id:2,name:示例二,icon:},{id:3,name:示例三,icon:✨}]build(){Column(){ForEach(this.dataList,(item:DataItem){Row({space:12}){Text(item.icon).fontSize(24)Text(item.name).fontSize(16)}.padding(12).width(100%)})}}6.4 样式与主题配置// 样式配置示例constThemeStyles{primaryColor:#F5A623,backgroundColor:#FFF8F0,cardBackground:#FFFFFF,textPrimary:#333333,textSecondary:#999999,borderRadius:12,spacing:16}StylesfunctionCardStyle(){.backgroundColor(ThemeStyles.cardBackground).borderRadius(ThemeStyles.borderRadius).shadow({radius:4,color:#10000000,offsetY:2})}

相关新闻

HarmonyOS应用开发实战:萌宠日记 - 数据备份与导出功能

HarmonyOS应用开发实战:萌宠日记 - 数据备份与导出功能

HarmonyOS应用开发实战:萌宠日记 - 数据备份与导出功能 前言 数据备份与导出 是保障用户数据安全的重要功能。在 萌宠日记 中,备份功能通过 ExtensionAbility(backup 类型) 实现系统级备份恢复,导出功能通过 文件 API…

2026/9/11 16:30:56 阅读更多 →
C/C++自动化交互编程:Expect库核心原理与实战应用

C/C++自动化交互编程:Expect库核心原理与实战应用

1. 项目概述:为什么要在C/C里用Expect?如果你写过C或C的自动化脚本,尤其是需要和命令行程序、交互式终端打交道的,肯定遇到过这样的场景:程序需要你输入密码,或者回答一个“yes/no”的确认,又或…

2026/9/10 14:07:25 阅读更多 →
jumamo本地语音生成工具部署与API调用全流程指南

jumamo本地语音生成工具部署与API调用全流程指南

这次我们来看一个名为 jumamo 的项目,从标题描述看,这应该是一个与语音生成或语音交互相关的工具。虽然标题本身带有调侃语气,但结合技术背景,jumamo 很可能是一个本地部署的语音模型,专注于文本到语音的转换&#xff…

2026/9/12 3:39:17 阅读更多 →

最新新闻

LeetCode-Go 题解精讲:0143.Reorder List 链表重排的两种解法(O(1) 空间原地实现)

LeetCode-Go 题解精讲:0143.Reorder List 链表重排的两种解法(O(1) 空间原地实现)

LeetCode-Go 题解精讲:0143.Reorder List 链表重排的两种解法(O(1) 空间原地实现) 【免费下载链接】LeetCode-Go ✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解 项目地址: https://gitcode.com…

2026/9/13 17:06:01 阅读更多 →
Kohya_ss Flux LoRA 训练快速上手:从打开开关到跑通省显存配置

Kohya_ss Flux LoRA 训练快速上手:从打开开关到跑通省显存配置

Kohya_ss Flux LoRA 训练快速上手:从打开开关到跑通省显存配置 【免费下载链接】kohya_ss 项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss 想在 Kohya_ss 里对 Flux.1 做 LoRA 微调,本文给出一条能直接跑通的最短路径:F…

2026/9/13 17:06:00 阅读更多 →
PDF补丁丁使用教程:免费开源PDF工具箱,快速完成书签修复、文件合并与图片提取

PDF补丁丁使用教程:免费开源PDF工具箱,快速完成书签修复、文件合并与图片提取

PDF补丁丁使用教程:免费开源PDF工具箱,快速完成书签修复、文件合并与图片提取 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转…

2026/9/13 17:06:00 阅读更多 →
MAS 微软激活脚本教程:Windows 激活与 Office 永久激活完整指南

MAS 微软激活脚本教程:Windows 激活与 Office 永久激活完整指南

MAS 微软激活脚本教程:Windows 激活与 Office 永久激活完整指南 【免费下载链接】Microsoft-Activation-Scripts Open-source Windows and Office activator featuring HWID, Ohook, TSforge, and Online KMS activation methods, along with advanced troubleshoot…

2026/9/13 17:06:00 阅读更多 →
基于MATLAB GUI的漂浮物垃圾分类检测实现方案

基于MATLAB GUI的漂浮物垃圾分类检测实现方案

简介:MATLAB GUI漂浮物垃圾分类检测项目是一份面向计算机、通信、人工智能、自动化等专业学生及从业者的完整可运行资源,主要解决水面漂浮物图像识别与分类问题,适合课设、大作业或毕设参考,也便于初学者入门和进阶者二次开发。压…

2026/9/13 17:06:00 阅读更多 →
Zola 多语言站点搭建完全指南:配置、内容组织与输出路径

Zola 多语言站点搭建完全指南:配置、内容组织与输出路径

Zola 多语言站点搭建完全指南:配置、内容组织与输出路径 【免费下载链接】zola A fast static site generator in a single binary with everything built-in. https://www.getzola.org 项目地址: https://gitcode.com/GitHub_Trending/zo/zola Zola 静态站点…

2026/9/13 17:05:00 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →