HarmonyOS 开发-MpChart运动健康场景实践案例

介绍

MpChart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI,MpChart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图等自定义图表库。

效果图预览

使用说明

  • 滑动屏幕,查看各图表组件。
  • 点击曲线图内容,展示图表信息。

实现思路

  1. 健身记录部分:使用柱状图描述近七日每日的热量消耗情况,主要实现点在于柱状图的创建过程。
  • 初始化图表配置构建类
  // 初始化图表配置构建类
  this.model = new BarChartModel();
  // 设置图表数据最大的绘制数,如果超过该数值,则不进行绘制图表的数值标签
  this.model.setMaxVisibleValueCount(VISIBLE_VALUE_COUNT);
  // 是否绘制图表的背景色,绘制范围为图表柱状图的绘制范围,不包含轴线之外的部分
  this.model.setDrawGridBackground(true);
  // 设置图表的背景色,颜色的规格需要满足CanvasRenderingContext2D.fillstyle/strokestyle规格
  this.model.setGridBackgroundColor(GRID_BG_COLOR);
  // 设置不绘制柱状图的柱体阴影背景
  this.model.setDrawBarShadow(false);
  // 设置柱状图的数值在柱体上方
  this.model.setDrawValueAboveBar(true);
  // 设置柱状图的高亮范围是否为整个柱体,只在堆叠柱状图中有区别
  this.model.setHighlightFullBarEnabled(true);
  • 限制线的设置
  // 为左Y轴设置LimitLine,可设置限制线的宽度,线段样式,限制标签的位置,标签字体大小等
  this.limitLine = new LimitLine(STEP_TARGET_NUMBER, STEP_TARGET);
  // 设置限制线的宽度
  this.limitLine.setLineWidth(LINE_WIDTH);
  // 设置限制线虚线类型的长度
  this.limitLine.enableDashedLine(DASHED_LINE_LENGTH, DASHED_SPACE_LENGTH, ZERO);
  // 设置限制线的颜色
  this.limitLine.setLineColor(Color.Gray);
  // 设置限制线的位置
  this.limitLine.setLabelPosition(LimitLabelPosition.RIGHT_TOP);
  // 设置限制线上文本的大小
  this.limitLine.setTextSize(vp2px(TEXT_SIZE));
  • X轴Y轴设置
  // 设置图表左Y轴信息
  this.leftAxis = this.model.getAxisLeft();
  if (this.leftAxis) {
    // 设置图表左Y轴最小值
    this.leftAxis.setAxisMinimum(ZERO);
    // 设置图表左Y轴是否在数据后绘制限制线
    this.leftAxis.setDrawLimitLinesBehindData(false);
    // 设置图表左Y轴数据的格式转换器
    this.leftAxis.setValueFormatter(new YValueFormatter());
    // 添加LimitLines
    this.leftAxis.addLimitLine(this.limitLine);
  }
  // 设置图表右Y轴信息
  this.rightAxis = this.model.getAxisRight();
  if (this.rightAxis) {
    // 设置图表右Y轴是否显示
    this.rightAxis.setEnabled(false);
    // 设置图表右Y轴最小值
    this.rightAxis.setAxisMinimum(ZERO);
  }
  // 设置X轴信息
  this.xAxis = this.model.getXAxis();
  if (this.xAxis) {
    // 设置X轴是否绘制网格线
    this.xAxis.setDrawGridLines(false);
    // 设置绘制标签个数
    this.xAxis.setLabelCount(LABEL_COUNT, false);
    //设置标签位置
    this.xAxis.setPosition(XAxisPosition.BOTTOM);
    // 设置数据的格式转换器
    this.xAxis.setValueFormatter(new XValueFormatter());
  }
  • 绑定图表数据
  // 生成数据
  this.data = this.getNormalData();
  // TODO 知识点:将数据与图表配置类绑定
  this.model.setData(this.data);
  1. 健康数据部分:使用曲线图展示每日的热量消耗情况,主要实现点在于曲线图的创建过程。
  • 初始化图表配置构建类
  // 初始化图表配置构建类
  this.model = new LineChartModel();
  this.model.setPinchZoom(false);
  this.model.setDrawGridBackground(false);
  • X轴Y轴设置
  // 设置X轴信息
  this.xAxis = this.model.getXAxis();
  if (this.xAxis) {
    //设置标签位置
    this.xAxis.setPosition(XAxisPosition.BOTTOM);
    // 设置X轴是否绘制网格线
    this.xAxis.setDrawGridLines(true);
    this.xAxis.setGranularity(1);
    // 设置数据的格式转换器
    this.xAxis.setValueFormatter(new XValueFormatter());
    // 设置绘制标签个数
    this.xAxis.setLabelCount(10);
    this.xAxis.enableGridDashedLine(2, 2, 0);
  }
  // 设置图表左Y轴信息
  this.leftAxis = this.model.getAxisLeft();
  if (this.leftAxis) {
    this.leftAxis.setLabelCount(4, true);
    this.leftAxis.setDrawGridLines(true);
    // 设置图表左Y轴是否在数据后绘制限制线
    this.leftAxis.setDrawGridLinesBehindData(true);
    this.leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART);
    this.leftAxis.setAxisMinimum(0);
    // 设置图表左Y轴数据的格式转换器
    this.leftAxis.setValueFormatter(new YValueFormatter());
    this.leftAxis.setEnabled(true);
    this.leftAxis.enableGridDashedLine(2, 2, 0);
  }
  // 设置图表右Y轴信息
  this.rightAxis = this.model.getAxisRight();
  if (this.rightAxis) {
    // 设置图表右Y轴是否显示
    this.rightAxis.setEnabled(false);
  }
  • 图表图例部分
  // 获取图表图例部件,设置图表图例部件不可用
  let legend: Legend | null = this.model.getLegend();
  if (legend) {
    legend.setEnabled(true);
    // 设置图例类型
    legend.setForm(LegendForm.LINE);
    // 设置图例文本大小
    legend.setTextSize(vp2px(14));
    // 设置图例方向为水平
    legend.setOrientation(LegendOrientation.HORIZONTAL);
    // 设置图例垂直对齐方式为顶部
    legend.setVerticalAlignment(LegendVerticalAlignment.TOP);
    // 设置图例水平对齐方式为左对齐
    legend.setHorizontalAlignment(LegendHorizontalAlignment.LEFT);
  }
  • 绑定图表数据
  // 生成数据
  this.lineData = this.getLineData();
  // TODO 知识点:将数据与图表配置类绑定
  this.model.setData(this.lineData);

工程结构&模块类型

  health                                       // 运动健康场景实践案例
  |---model                                         
  |   |---BasicDataSource.ets                  // 数据类型文件
  |---view
  |   |---BarCharts.ets                        // 柱状图组件
  |   |---MpCharts.ets                         // 图表列表页面
  |   |---LineCharts.ets                       // 曲线图组件

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/531111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang-Gin 框架写的免杀平台,内置分离、捆绑等多种BypassAV方式

Golang-Gin 框架写的免杀平台,内置分离、捆绑等多种BypassAV方式 Golang-Gin 框架写的免杀平台,内置分离、捆绑等多种BypassAV方式。 cool 时间线: Golang Gin 框架写的免杀平台- (2021.11.12)Golang Gin 框架写的免杀平台,更…

分享|人力RPO项目是什么?算得上蓝海项目吗?

在当今竞争激烈的商业环境中,企业为了降低成本、提高效率,纷纷寻求创新的人力资源解决方案。其中,人力RPO(Recruitment Process Outsourcing,招聘流程外包)项目逐渐受到广泛关注。那么,人力RPO项目究竟是什么呢?它是否…

40-软件部署实战(上):部署方案及负载均衡、高可用组件介绍

40-软件部署实战(上):部署方案及负载均衡、高可用组件介绍 。 系统缺少高可用、弹性扩容等能力,是很脆弱的,遇到流量波峰、发布变更很容易出问题。在系统真正上线前,我们需要重新调整部署架构,来…

成为嵌入式工程师以后才明白的道理

1. 刚开始,不要太在乎薪水20多岁的年纪,一人吃饱,全家不饿,太看重薪水,反而会错过很多机会,而且经验不足时,薪水相差也不大。在开始前我有一些资料,是我根据网友给的问题精心整理了一…

大数据相关组件安装及使用

自学大数据相关组件 持续更新中。。。 一、linux安装docker 1、更新yum sudo yum update2、卸载docker旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine3、…

【文件IO】JavaIO详解

一.文件的相关概念 什么是文件? 文件是计算机中存储信息的基本单位。文件通常指的是存储在计算机或其他数字存储设备上的一段信息的集合,这些信息可以是文本、图片、音频、视频等不同格式的数据。 文件路径: 文件的路径可以分为两类 相对路径:先指定一个"当前…

批量把GBK文本编码换成UTF-8

因为工作团队协作原因,有的同事使用gbk,有的使用utf-8,不方便,于是商量便统一换成utf-8,但是项目文件太多,所以百度搜索于是有了用python脚本一键实现的方案,以下为步骤. 本人亲测可用!!!(只在win11上亲测可用) 以下代码只实现对.c和.h文件的编码转换 1.电脑安装python脚本: …

css文字颜色渐变

background: linear-gradient(to top, #C3F8B3, #66FFFF);-webkit-background-clip: text;-webkit-text-fill-color: transparent; 效果

户外骑行存档(图新地球与运动健康App)经验分享

0序 之前天天加班熬夜,身体素质有些下降,在锻炼的过程中喜欢上了骑行,周周骑、天天骑。 骑行会产生很多的轨迹(有很多朋友不喜欢装很多app,就用手机自带的运动健康,也有喜欢专业运动app的,道理…

通过 Cookie、Redis共享Session 和 Spring 拦截器技术,实现对用户登录状态的持有和清理(四)

本篇内容对应 “2.5 开发登录、退出功能” 小节 “4.7 优化登陆模块” 小节 2.6 显示登录信息 2.7 账号设置 2.8 检查登录状态 登录功能的流程是什么? UUID为什么不会重复? 因为UUID是基于mac物理地址、时间戳、随机数等信息生成。因此UUID居于极高的唯…

在B站看课的进度助手

效果 代码 BilibiliVideoDurationCrawler import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; imp…

【教程】混淆Dart 代码

什么是代码混淆? 代码混淆是一种将应用程序二进制文件转换为功能上等价,但人类难于阅读和理解的行为。在编译 Dart 代码时,混淆会隐藏函数和类的名称,并用其他符号替代每个符号,从而使攻击者难以进行逆向工程。 Flut…

每日一题:有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 注…

教你构建一个优秀的SD Prompt

构建一个优秀的Prompt 在使用Stable Diffusion AI时,构建一个有效的提示(Prompt)是至关重要的第一步。这个过程涉及到创造性的尝试和对AI行为的理解。这里我会对如何构建一个好的Prompt进行一个总结。 什么是一个好的提示词 构建有效的提示是使用Stable Diffusion AI或其…

职场商务英语口语柯桥外语培训之“手机欠费”用英文怎么说?

大家天天玩手机, 肯定会碰到 “欠费”“没电”“关机” 这些情况, 那么问题来了, 你知道用英语怎么说? 一起来和小编来学习下吧 今天,一起来学习一下吧。 ● 手机欠费 英语怎么说? ● 肯定有同学要…

二手车商的套路

https://www.dongchedi.com/article/7126394624675578405 https://www.dongchedi.com/article/7126394624675578405 现在,有越来越多的人去了解二手车,二手车相对于新车来说,更加的亲民划算。很多新车需要四五十万,而二手车有可…

信息素养与终身学习解锁题目搜索之道的新引擎【文末送书】

文章目录 信息素养:搜索前的准备终身学习:搜索后的深化新引擎的构建与运行 搜索之道:信息素养与终身学习的新引擎【文末送书】 随着互联网的快速发展和信息技术的日益成熟,搜索已经成为获取知识和信息的主要途径之一。然而&#x…

浙大恩特客户资源管理系统 RegulatePriceAction SQL注入漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统 RegulatePriceAction接口存在 SQL 注入漏洞,攻击者可通过输入恶意 SQL …

47 转置卷积【李沐动手学深度学习v2课程笔记】

1. 转置卷积 卷积层和汇聚层通常会减少下采样输入图像的空间维度(高和宽),卷积通常来说不会增大输入的高和宽,要么保持高和宽不变,要么会将高宽减半,很少会有卷积将高宽变大的。可以通过 padding 来增加高…

layui复选框勾选取消勾选事件监听

监听事件放置位置&#xff1a; form.on(checkbox(equipInputClick), function(data){var a data.elem.checked;var val data.value;if(a true){}else{}});html部分 <input lay-filter"equipInputClick" type"checkbox" lay-skin"primary&quo…