HarmonyOS 应用开发《掌上英语》第48篇:学习进度追踪——从数据记录到可视化展示
学习进度追踪——从数据记录到可视化展示一、进度追踪的整体架构学习进度追踪是英语学习 App 的核心功能之一。用户需要知道今天学了多少、“总共学了多少”、“目标完成得怎么样”。本项目通过 LearningPlanManager 管理目标数据通过 CourseHomePage 和首页的 Progress 组件进行可视化展示。数据流如下用户答题 → recordWordStudy(count) ↓ LearningPlanManager ├── todayWordCount → 今日已学 ├── totalWordCount → 累计已学 ├── continuousDays → 连续天数 └── getTodayProgress() → 百分比 ↓ CourseHomePage / MainPage └── Progress 组件 → 可视化展示二、学习计划的定义2.1 LearningPlan 模型exportinterfaceLearningPlan{dailyWordGoal:number// 每日单词目标dailyListeningGoal:number// 每日听力目标分钟dailyReadingGoal:number// 每日阅读目标分钟continuousDays:number// 连续学习天数lastStudyDate:number// 最后学习日期时间戳todayWordCount:number// 今日已学单词todayListeningDuration:number// 今日已听时长todayReadingDuration:number// 今日已读时长totalWordCount:number// 总学习单词数totalStudyDuration:number// 总学习时长badges:string[]// 成就徽章// ... 提醒相关字段}默认计划DEFAULT_LEARNING_PLAN为每日 20 个单词、15 分钟听力、10 分钟阅读。2.2 数据记录入口在 AnswerQuestionsPage 完成答题后通过recordStudyData方法记录学习数据recordStudyData(){try{lettopicItemTypeListthis.toTopicItemTypeList(this.ques);// 1. 记录统计StatisticsManager.getInstance().calculateStatistics(topicItemTypeList,this.practiceDuration);// 2. 更新学习计划letplanManagerLearningPlanManager.getInstance();letansweredCountthis.ques.filter(itemitem.isAnswer).length;planManager.recordWordStudy(answeredCount);}catch(e){Logger.error(AnswerQuestionsPage,记录学习数据失败:${JSON.stringify(e)});}}recordWordStudy方法执行三个操作累加todayWordCount和totalWordCount调用checkAndUpdateContinuousDays更新连续天数调用checkAndUnlockBadges检查是否满足徽章解锁条件三、今日进度计算3.1 百分比计算publicgetTodayProgress():TodayProgress{try{letplanthis.getLearningPlan();letresult:TodayProgress{wordProgress:plan.dailyWordGoal0?Math.min(100,Math.floor(plan.todayWordCount/plan.dailyWordGoal*100)):0,listeningProgress:plan.dailyListeningGoal0?Math.min(100,Math.floor(plan.todayListeningDuration/plan.dailyListeningGoal*100)):0,readingProgress:plan.dailyReadingGoal0?Math.min(100,Math.floor(plan.todayReadingDuration/plan.dailyReadingGoal*100)):0};returnresult;}catch(e){Logger.error(LearningPlanManager,获取今日进度失败:${JSON.stringify(e)});return{wordProgress:0,listeningProgress:0,readingProgress:0};}}关键点Math.min(100, ...)防止进度超过 100%目标为 0 时返回 0%避免除零错误每个维度独立计算单词、听力、阅读3.2 首页进度卡展示在 CourseHomePage 中进度通过 Progress 组件展示Row(){Column(){Text(${this.learnedCount}/${this.totalCount}).fontSize(22).fontWeight(FontWeight.Bold).fontColor(#165DFF);Text(已学 / 总数).fontSize(11).fontColor($r(sys.color.font_secondary));}.layoutWeight(1);Column(){Text(今日需学 30 词).fontSize(13);Text(已完成${this.learnedCount}词).fontSize(11);}}Progress({value:this.getTodayProgress(),total:30,type:ProgressType.Linear}).width(100%).height(6).color(#165DFF).backgroundColor(#E8EEF8);这里使用了ProgressType.Linear线性进度条以30为每日目标总数value是当前已学数量。四、总进度统计4.1 学习统计摘要publicgetStudySummary():StudySummary{try{letplanthis.getLearningPlan();letresult:StudySummary{totalDays:plan.continuousDays,totalWords:plan.totalWordCount,totalDuration:plan.totalStudyDuration,badgeCount:plan.badges.length};returnresult;}catch(e){Logger.error(LearningPlanManager,获取学习统计摘要失败:${JSON.stringify(e)});return{totalDays:0,totalWords:0,totalDuration:0,badgeCount:0};}}这个摘要方法返回四个关键指标可以在学习报告页面统一呈现。4.2 学习报告中的 Dashboard 集成DashboardManager 也整合了进度数据publicrefreshData():void{letplanManagerLearningPlanManager.getInstance();letstatsManagerStatisticsManager.getInstance();letplanplanManager.getLearningPlan();letprogressplanManager.getTodayProgress();letsummarystatsManager.getHistoryStatistics();this.todayWordProgressprogress.wordProgress;this.todayListeningProgressprogress.listeningProgress;this.todayReadingProgressprogress.readingProgress;this.overallProgressMath.floor((this.todayWordProgressthis.todayListeningProgressthis.todayReadingProgress)/3);this.continuousDaysplan.continuousDays;this.weeklyDatathis.buildWeeklyData(plan);// ...}overallProgress是三个进度维度的平均值用于展示总体完成度。五、Progress 组件的两种形态5.1 线性进度条ProgressType.LinearProgress({value:13,total:30,type:ProgressType.Linear}).width(100).height(6).color(#165DFF).backgroundColor(#E8EEF8);适用场景展示单词学习进度、阅读进度。形态简洁适合嵌入卡片中。5.2 环形进度条ProgressType.RingProgress({value:65,total:100,type:ProgressType.Ring}).width(50).height(50).color(#165DFF).style({strokeWidth:4});适用场景首页今日学习卡中的总体进度。圆形视觉更醒目适合作为模块的视觉锚点。5.3 柱状图自定义实现DashboardManager 中的 WeeklyBarChart 不使用系统的 Progress 组件而是用 Row 组件模拟柱状图Column(){if(item.readingMin0){Row().width(20).height(this.barHeight(item.readingMin)).backgroundColor(#FF9800);}if(item.listeningMin0){Row().width(20).height(this.barHeight(item.listeningMin)).backgroundColor(#4CAF50);}if(item.wordCount0){Row().width(20).height(this.barHeight(item.wordCount)).backgroundColor(#2196F3);}}.height(120).justifyContent(FlexAlign.End);堆叠柱状条每种颜色代表一个维度的数据高度通过barHeight方法按比例计算。六、每日数据重置新的一天开始时需要重置今日学习数据publicresetDailyData():LearningPlan{try{letplanthis.getLearningPlan();plan.todayWordCount0;plan.todayListeningDuration0;plan.todayReadingDuration0;this.saveLearningPlan(plan);returnplan;}catch(e){Logger.error(LearningPlanManager,重置每日数据失败:${JSON.stringify(e)});returnthis.getLearningPlan();}}实际调用时机在checkAndUpdateContinuousDays中隐式完成——当检测到「最后学习日期不是今天」时新的记录会自然产生新的今日数据旧数据不再被引用。七、总结从 LearningPlanManager 的数据记录到 Progress 组件的可视化呈现学习进度追踪形成了一条完整的数据链路。三个维度的目标单词、听力、阅读、两种进度形态线性条、环形、以及柱状图等自定义图表共同构成了用户学习旅程的仪表盘让进步看得见。

相关新闻

多模态RAG技术:跨模态检索与生成实战解析

多模态RAG技术:跨模态检索与生成实战解析

1. 多模态RAG技术全景解析当我们在2023年观察到GPT-4V能够同时理解图像和文本时,一个关键问题随之浮现:如何让大语言模型突破纯文本的局限,真正实现多模态知识的融合与应用?这正是多模态RAG(Retrieval-Augmented Gener…

2026/7/26 2:51:00 阅读更多 →
智能体反思能力架构设计与工程实践

智能体反思能力架构设计与工程实践

1. 项目概述在AI领域,让智能体(Agent)具备反思能力是一个极具挑战性的前沿课题。不同于传统程序化的任务执行,具备反思能力的Agent能够像人类一样审视自己的行为、评估决策质量,并在后续行动中进行自我调整。这种能力对…

2026/7/26 2:51:00 阅读更多 →
像素即坐标:工业机器人视觉定位新方法

像素即坐标:工业机器人视觉定位新方法

1. 项目背景与核心价值去年在给工业机器人做视觉定位系统升级时,我发现传统坐标系转换方法存在一个致命缺陷:当摄像头与机械臂安装角度超过45度后,定位误差会呈指数级增长。这个问题困扰了我整整三个月,直到偶然看到女儿玩的《我的…

2026/7/26 2:50:00 阅读更多 →

最新新闻

提示词工程实战:从零样本学习到思维树技巧

提示词工程实战:从零样本学习到思维树技巧

1. 项目概述在2023年这个AI技术爆发的关键节点,提示词工程(Prompt Engineering)已成为每个希望高效使用大语言模型(LLM)的从业者必须掌握的技能。我作为最早一批将GPT模型应用于实际业务的技术人员,见证了从…

2026/7/26 3:00:03 阅读更多 →
基于CNN的蔬菜识别系统设计与优化实践

基于CNN的蔬菜识别系统设计与优化实践

1. 项目背景与核心价值蔬菜识别系统作为计算机视觉在农业领域的典型应用,本质上是一个细粒度图像分类问题。不同于常规物体识别,蔬菜品类间往往具有高度相似的形态特征(如白菜与娃娃菜、青椒与彩椒),传统机器学习方法在…

2026/7/26 3:00:03 阅读更多 →
AIM即时通讯技术架构解析:从OSCAR协议到现代启示

AIM即时通讯技术架构解析:从OSCAR协议到现代启示

在即时通讯技术发展历程中,AOL Instant Messenger(AIM)曾是一个时代的标志。这款由美国在线(AOL)于1997年推出的即时通讯软件,凭借其创新的好友列表、在线状态感知和实时消息传递功能,迅速成为全…

2026/7/26 3:00:03 阅读更多 →
Linux pivot_root系统调用详解与容器隔离实践

Linux pivot_root系统调用详解与容器隔离实践

1. 理解pivot_root的本质 在Linux系统中,pivot_root是一个鲜为人知却极其强大的系统调用。我第一次接触这个功能是在2016年构建容器运行时环境时,当时需要为每个容器创建独立的根文件系统。与更常见的chroot不同,pivot_root提供了更彻底的隔离…

2026/7/26 3:00:03 阅读更多 →
企业级RAG系统架构设计与Milvus向量数据库实践

企业级RAG系统架构设计与Milvus向量数据库实践

1. 企业级RAG系统架构设计解析在构建企业级RAG(Retrieval-Augmented Generation)系统时,我们需要考虑的核心要素包括:检索效率、数据安全性、系统扩展性和成本控制。Milvus作为一款开源的向量数据库,其分布式架构和高效…

2026/7/26 3:00:03 阅读更多 →
金融AI交易技术:OneAgent智能体的革命性突破

金融AI交易技术:OneAgent智能体的革命性突破

1. 项目概述:金融AI交易的技术革命上周在纽约举办的OneAgent智能体全球发布会,彻底点燃了金融科技圈的热情。作为全程参与发布会的技术顾问,我亲眼见证了这套系统如何用47个实时交易策略演示征服了在场200多位对冲基金经理。这不仅仅是又一个…

2026/7/26 2:59:03 阅读更多 →

日新闻

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

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

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

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

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

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

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

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

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

2026/7/26 0:00:31 阅读更多 →

周新闻

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

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

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

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

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

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

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

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

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

2026/7/26 0:00:31 阅读更多 →

月新闻