情绪分布图表:Stack 进度条 + 百分比计算

前言

在"海风日记"的回顾页中,情绪分布图表通过 Stack 进度条展示了不同情绪的比例,让用户直观地了解自己的情绪趋势。

本文将从 ReviewTab.ets 源码出发,深入讲解进度条图表的实现。


一、情绪数据模型

typescript 复制代码
interface MoodDataItem {
  label: string      // 标签,如 "😊 开心"
  count: number      // 数量
  color: string      // 颜色
}

private moodData: MoodDataItem[] = [
  { label: '😊 开心', count: 8, color: COLOR_MOOD_SUNNY },
  { label: '🙂 还不错', count: 5, color: COLOR_PRIMARY },
  { label: '😐 平静', count: 4, color: COLOR_MOOD_CALM },
  { label: '😕 低落', count: 2, color: COLOR_MOOD_LOW },
  { label: '😢 难过', count: 1, color: COLOR_MOOD_SAD },
]

private totalCount: number = 20

二、进度条实现

typescript 复制代码
ForEach(this.moodData, (item: MoodDataItem) => {
  Row({ space: 10 }) {
    // 情绪标签
    Text(item.label).fontSize(13).fontColor(COLOR_TEXT_MAIN).width(80)

    // 进度条
    Stack({ alignContent: Alignment.Start }) {
      // 背景条
      Row().height(8).width('100%')
        .backgroundColor('rgba(200,180,140,0.15)')
        .borderRadius(4)

      // 前景条
      Row().height(8)
        .width(`${(item.count / this.totalCount) * 100}%`)
        .backgroundColor(item.color)
        .borderRadius(4)
    }
    .layoutWeight(1)

    // 数量
    Text(`${item.count}`)
      .fontSize(12).fontColor(COLOR_TEXT_SECONDARY).width(24).textAlign(TextAlign.End)
  }
  .width('100%').alignItems(VerticalAlign.Center)
}, (item: MoodDataItem) => item.label)

三、百分比计算

typescript 复制代码
// 宽度百分比
.width(`${(item.count / this.totalCount) * 100}%`)

四、情绪颜色

情绪 颜色常量 颜色
开心 COLOR_MOOD_SUNNY #F5A623
还不错 COLOR_PRIMARY #F5A623
平静 COLOR_MOOD_CALM #7ECAAE
低落 COLOR_MOOD_LOW #8BAFD6
难过 COLOR_MOOD_SAD #B0A8C8

五、常见问题

5.1 进度条宽度异常

问题:进度条宽度超过了 100%。

原因 :百分比计算错误,item.count / totalCount 大于 1。

解决方案 :确保 totalCount 是所有 item.count 的总和。


总结

本文通过"海风日记"的情绪分布图表,深入讲解了进度条的实现:

  1. Stack 叠加:背景条 + 前景条
  2. 百分比计算:动态宽度
  3. 情绪颜色:每种情绪对应颜色
  4. 数据模型:MoodDataItem 接口

下一篇文章将深入讲解 时间维度切换,敬请期待。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

相关推荐
ServBay40 分钟前
本地模型已经跑起来了,Copilot Fusion 为什么还要联网?
后端·ai编程·github copilot
武子康1 小时前
H3-World 的动作没按时发生,先检查时间线变成了什么
人工智能·后端·agent
苍何1 小时前
腾讯 Buddy One 来了,办公全家桶一键打通WorkBuddy(附教程)
后端
GIS数据转换器2 小时前
基于CIM的城市智慧供热监管服务平台
java·大数据·开发语言·人工智能·后端·物联网·struts
adfreedom2 小时前
如何避免每个业务系统中都有几十个枚举查询
后端
m0_639906942 小时前
SpringBoot自动配置原理
java·spring boot·后端
萧瑟余晖3 小时前
Spring Data综合实战与调优详解
java·后端·spring
用户574385305114 小时前
第 2 章:裸写 Query(原生驱动)
后端
用户574385305114 小时前
第 8 章:Service 层的诞生(硬编码版)
后端