当前位置: 首页 > article >正文

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)#

前言

在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰地了解自己的运动表现,从而更好地调整运动计划。本文将结合鸿蒙(HarmonyOS)开发实战经验,如何使用 mpchart 绘制运动配速图表,让运动数据的展示更加生动有趣。

在这里插入图片描述

一、为什么选择 mpchart

mpchart 是一个功能强大的图表库,支持多种类型的图表,如折线图、柱状图、饼图等。它具有以下特点:

• 丰富的图表类型:提供了多种图表类型,满足不同场景下的数据可视化需求。

• 高度可定制:可以通过丰富的 API 自定义图表的样式、颜色、标签等。

• 性能优化:在绘制大量数据时,mpchart 能够保持良好的性能,确保应用流畅运行。

• 跨平台支持:支持多种平台,包括 Android、iOS 和 HarmonyOS,方便开发者在不同平台上实现一致的图表展示效果。

二、初始化配置

在使用 mpchart 绘制运动配速图表之前,我们需要进行一些初始化配置。以下是初始化配置的代码:

import { LineChartModel, Description, Legend, LimitLine, LineData, LineDataSet, EntryOhos, JArrayList, ChartColorStop, ILineDataSet, XAxisPosition, YAxisLabelPosition, LegendForm, LimitLabelPosition, Mode } from '@ohos/mpchart';aboutToAppear(): void {// Step1:必须:初始化图表配置构建类this.model = new LineChartModel();// Step2:配置图表指定样式,各部件间没有先后之分// 为图表添加数据选择的监听器// this.model.setOnChartValueSelectedListener(this.valueSelectedListener);// 获取图表描述部件,设置图表描述部件不可用,即图表不进行绘制描述部件let description: Description | null = this.model.getDescription()if (description) {description.setEnabled(false);}// 获取图表图例部件,设置图表图例形状为线形let legend: Legend | null = this.model.getLegend();if (legend) {legend.setEnabled(false);// draw legend entries as lineslegend.setForm(LegendForm.LINE);}// 为左Y轴设置LimitLine,可设置限制线的宽度,线段样式,限制标签的位置,标签字体大小等let limitLine1 = new LimitLine(120, 'Upper Limit');limitLine1.setLineWidth(0);//设置虚线样式limitLine1.enableDashedLine(10, 10, 0);//设置标签位置limitLine1.setLabelPosition(LimitLabelPosition.RIGHT_TOP);limitLine1.setTextSize(10);// 设置图表左Y轴信息let leftAxis = this.model.getAxisLeft();if (leftAxis) {leftAxis.setAxisLineWidth(0)//设置绘制标签个数leftAxis.setLabelCount(6, false);//设置标签位置leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART)//设置自定义标签格式化leftAxis.setValueFormatter(new MyIAxisValueFormatter())}// 设置图表右Y轴信息let rightAxis = this.model.getAxisRight();if (rightAxis) {rightAxis.setEnabled(false);}// 设置X轴信息let xAxis = this.model.getXAxis();if (xAxis) {xAxis.setPosition(XAxisPosition.BOTTOM);xAxis.setDrawGridLines(false);xAxis.setGranularity(1);xAxis.setLabelCount(5);xAxis.setValueFormatter(new MyXIAxisValueFormatter())}// 生成图表数据let lineData: LineData = this.getLineData();// 将数据与图表配置类绑定this.model.setData(lineData);
}

核心点解析

Description:设置图表描述部件,可以启用或禁用描述部件。

Legend:设置图表图例部件,可以自定义图例的形状和样式。

LimitLine:为 Y 轴设置限制线,可以设置线的宽度、样式、标签位置等。

XAxisYAxis:分别设置 X 轴和 Y 轴的样式,包括标签位置、标签格式化等。

LineData:生成图表数据,绑定到图表配置类中。

三、数据填充

在初始化配置完成后,我们需要填充数据到图表中。以下是数据填充的代码:

private getLineData(): LineData {let values: JArrayList<EntryOhos> = new JArrayList<EntryOhos>();for (let i = 0; i < this.record!.points.length; i++) {let point = this.record!.points[i];let speed = point.speed; // 当前速度let time = point.netDuration; // 时间values.add(new EntryOhos(time, speed));}let dataSet = new LineDataSet(values, '配速');dataSet.setHighlightEnabled(false);dataSet.setDrawIcons(false);dataSet.setMode(Mode.LINEAR); // 直线模式dataSet.setDrawCircles(false); // 不绘制数据点圆圈dataSet.setDrawCircleHole(false); // 不绘制内部孔dataSet.setColorByColor(0xFFFE9543); // 设置折线颜色// 渐变色填充let gradientFillColor = new JArrayList<ChartColorStop>();gradientFillColor.add(["#99FE9543", 0]);gradientFillColor.add(["#00FE9543", 1]);dataSet.setGradientFillColor(gradientFillColor);dataSet.setDrawFilled(true);// 设置数据点的颜色dataSet.setCircleColor(Color.Blue); // 设置为你想要的颜色// 设置数据点的半径dataSet.setCircleRadius(4); // 设置半径大小dataSet.setCircleHoleRadius(2); // 设置内径let dataSetList: JArrayList<ILineDataSet> = new JArrayList<ILineDataSet>();dataSetList.add(dataSet);let lineData: LineData = new LineData(dataSetList);return lineData;
}

核心点解析

EntryOhos:表示图表中的一个数据点,包含 X 和 Y 坐标。

LineDataSet:表示一组数据点,可以设置数据点的样式、颜色、渐变色填充等。

LineData:表示图表的数据集合,可以包含多个LineDataSet

四、样式展示

在数据填充完成后,我们需要将图表展示到页面上。以下是样式展示的代码:

@Builder
DataAnalysisBuilder() {Column() {Text('配速变化趋势').fontSize(16).fontWeight(FontWeight.Medium).margin({ top: 16, bottom: 8 }).width('100%').textAlign(TextAlign.Start).padding({ left: 16 })Row() {Column() {Text('最快').fontSize(12).fontColor('#666')Text(RunUtil.secondsToPace(Math.min(...this.record!.points.map(p => p.pace)))).fontSize(20).fontColor('#333').margin({ top: 4 })}.layoutWeight(1)Column() {Text('平均').fontSize(12).fontColor('#666')Text(RunUtil.secondsToPace(this.record!.avgPace)).fontSize(20).fontColor('#333').margin({ top: 4 })}.layoutWeight(1)}.width('100%').padding(16)LineChart({ model: this.model }).width('100%').height(240).backgroundColor(Color.White).margin({ top: 8 })}.width('100%').backgroundColor('#F5F5F5')
}

核心点解析

LineChart:表示图表组件,通过绑定model属性展示图表。

Text:用于展示文本信息,如标题、数据标签等。

RowColumn:用于布局,分别表示水平和垂直布局。

五、总结

通过 mpchart,我们可以轻松实现运动配速图表的绘制。

相关文章:

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...