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());// 添加LimitLinesthis.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.鸿蒙南向开发方向

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQLite数据库概述及在Java中的应用

## 什么是SQLite数据库? SQLite是一种轻量级的数据库管理系统,它不需要一个独立的服务器进程或操作系统的运行,而是将整个数据库,包括定义、表、索引以及数据本身,全部存储在一个独立的磁盘文件中。SQLite的设计理念是…

shell命令行中脚本特殊注释指定脚本解释器

在Linux系统中,#!/usr/bin 是一个特殊的注释,通常称为"shebang" 或 “hashbang”。用于指定脚本的解释器。 即它的目的是告诉操作系统应该使用哪个解释器来执行脚本。 通过在脚本的第一行使用#!,后面跟着解释器的路径,…

GIF在线生成器

上传图片就能生成GIF的前端WEB工具 源码也非常简单 <!DOCTYPE html> <html lang"zh" class"dark"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1, m…

【opencv】示例-drawing.cpp画线、箭头、矩形、多边形、椭圆、圆形以及在图像上渲染文本并通过循环实现动态绘制效果...

#include "opencv2/core.hpp" // 引入opencv2核心头文件 #include "opencv2/imgproc.hpp" // 引入opencv2图像处理头文件 #include "opencv2/highgui.hpp" // 引入opencv2高级GUI(head-up display)头文件 #include <stdio.h> // 引入标准输…

生成随机图片验证码

随着互联网的不断发展&#xff0c;安全性问题日益突出。为了保障用户账号的安全性&#xff0c;很多网站都引入了验证码机制。验证码是一种区分用户是计算机还是人的公共全自动程序&#xff0c;可以有效防止恶意攻击和自动化脚本的滥用。本文将介绍如何使用Python生成随机图片验…

论文笔记:面向实体的多模态对齐与融合网络假新闻检测

整理了2022TMM期刊 Entity-Oriented Multi-Modal Alignment and Fusion Network for Fake News Detection&#xff09;论文的阅读笔记 背景模型改进的动态路由算法Cross-Modal Fusion 实验 背景 现有的假新闻方法对多模态特征进行各种跨模态交互和融合&#xff0c;在检测常见假…

什么是DDOS安全防护?都有哪些防护措施?

DDOS安全防护是一种针对分布式拒绝服务器攻击的安全措施&#xff0c;DDOS攻击主要是通过向目标服务器发送大量的服务请求或者是无效流量&#xff0c;给服务器造成一定的压力&#xff0c;从而导致服务器不可用的攻击方式&#xff0c;DDOS安全防护主要是保护网络和服务器不会受到…

MT3022 召唤神龙

思路&#xff1a;二分答案 。check():检查组p套卡是否成立&#xff0c;即检查r卡是否足够组成p套卡。 &#xff08;易错点&#xff1a;check的思路&#xff0c;开long long&#xff09; #include <bits/stdc.h> using namespace std; long long int n, m; long long int…

【VScode】同时编辑多处

【VScode】同时编辑多处 1. 多光标自定义批量编辑2. 选择多个&#xff0c;同时操作(批量选中局部匹配项)3. 取消选择4. 在不移动光标的情况下滚动屏幕5. 批量选中全局匹配项6.重点6.1 通过上下键选择多行6.2 同时选中所有行的末尾6.3 选中多列另一种方式6.4 通过正则的方式配置…

东方博宜 1582. 马里奥的银币2

东方博宜 1582. 马里奥的银币2 思路&#xff1a;这道题好简单~ 注意的点是 n/2 要记得变成浮点数 n/2.0 或者 n*1.0/2 #include<iostream> using namespace std; int main() {int a[1001] ;int n ;cin >> n ;for(int i 0 ; i < n ; i){cin >> a[i] ;}…

C++奇迹之旅:探索类对象模型内存的存储猜想

文章目录 &#x1f4dd;前言&#x1f320; 类的实例化&#x1f309;类对象模型 &#x1f320; 如何计算类对象的大小&#x1f309;类对象的存储方式猜想&#x1f320;猜想一&#xff1a;对象中包含类的各个成员&#x1f309;猜想二&#xff1a;代码只保存一份&#xff0c;在对象…

蓝桥杯——运动会

题目 n 个运动员参加一个由 m 项运动组成的运动会&#xff0c;要求每个运动员参加每个项目。每个运动员在每个项目都有一个成绩&#xff0c;成绩越大排名越靠前。每个项目&#xff0c;不同运功员的成绩不会相 同&#xff0c;因此排名不会相同。(但是不同项目可能成绩会相同) 每…

CST电磁仿真基本单位设置和保存结果【仿真教程】

保存结果的Result Navigator 积累的结果一目了然&#xff01; 用户界面上的Result Navigator 在一个仿真工程中更改变量取值进行仿真分析或者改变设置进行仿真分析时&#xff0c;之前的1DResult会不会消失呢&#xff1f; 1D Result&#xff1a;CST中1D Result指的是Y值取决…

VirusTaxo:病毒物种注释

https://github.com/omics-lab/VirusTaxo 安装 git clone https://github.com/omics-lab/VirusTaxo mamba create -n VirusTaxo python3.10 mamba activate VirusTaxo cd VirusTaxo python3 -m venv environment source ./environment/bin/activate pip install -r require…

DSP笔记12-PWM基础知识及EPWM

PWM pulse width modulation 脉冲宽度调制&#xff0c;宽度可调节的方波脉冲&#xff0c;驱动开关器件&#xff0c; 参数&#xff1a; 1.频率f 1kHz&#xff0c;2kHz开关损耗 2.周期T 3.幅值&#xff0c;高低电平之间电压 gpio输出3.3V&#xff0c;转换成5V高电平输出 4.占…

使用Springboot配置生产者、消费者RabbitMQ?

生产者服务 1、引入依赖以及配置rabbitmq 此时我们通过使用springboot来快速搭建一个生产者服务 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> applica…

【Java SE】8.2多态

目录 1.多态 1.1多态的概念 1.2多态实现条件 1.3重写 1.4向上转移和向下转型 1.4.1向上转型 1.4.2向下转型 1.5多态的优缺点&#xff1a; 1.6避免在构造方法中调用重写的方法 1.多态 1.1多态的概念 多态的概念&#xff1a;通读来说&#xff0c;就是具有多种形态&…

规则引擎之LiteFlow应用

官网地址&#xff1a;LiteFlow DEMO 整体结构 1.引入maven依赖 <dependency><groupId>com.yomahub</groupId><artifactId>liteflow-spring-boot-starter</artifactId><version>2.11.4.2</version> </dependency> 2. 配置yml …

蓝桥杯第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组题解

1.裁纸刀 题目链接&#xff1a;0裁纸刀 - 蓝桥云课 (lanqiao.cn) 思路&#xff1a;简单的推导一下公式 #include <iostream> using namespace std; int main() {// 请在此输入您的代码cout<<41921*20<<endl;return 0; } 2.灭鼠先锋 题目链接&#xff1a…

Linux--进程的概念(一)

目录 一、冯诺依曼体系结构二、操作系统2.1 什么是操作系统2.2 操作系统的意义 三、进程3.1 进程的基本概念3.2 描述进程——PCB3.3 进程和程序的区别3.4 task_struct-PCB的一种3.5 task_struct的内容分类 四、如何查看进程4.1 通过系统文件查看进程4.2 通过ps指令查看进程 五、…