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,我們可以輕松實現運動配速圖表的繪制。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86031.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86031.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86031.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git 切換到舊提交,同時保證當前修改不丟失

在 Git 中&#xff0c;可以通過以下幾種方式切換到之前的提交&#xff0c;同時保留當前的修改 1. 使用 git checkout 創建臨時分離頭指針&#xff08;推薦用于查看代碼&#xff09; git checkout <commit-hash>這會讓你進入"分離頭指針"狀態&#xff0c;你可…

東芝Toshiba DP-4528AG打印機信息

東芝 Toshiba DP 4528AG 是一款黑白激光數碼復合機&#xff1a; 類型&#xff1a;激光數碼復合機&#xff0c;涵蓋復印、打印、掃描、傳真功能&#xff0c;能滿足辦公室多樣化的文檔處理需求。速度類型&#xff1a;中速&#xff0c;黑白復印和打印速度可達 45 頁 / 分鐘&#…

Qt生成日志與以及捕獲崩潰文件(mingw64位,winDbg)————附帶詳細解說

文章目錄 Qt生成日志與以及報錯文件(mingw64位&#xff0c;winDbg)0 背景與結果0.1 背景0.2 結果1 WinDbg1.1 安裝1.2 使用 2 編寫代碼2.1 ccrashstack類2.2 編寫輸出捕獲異常的dmp文件2.2 編寫輸出日志文件2.3 調用生成日志和dmp文件 參考 Qt生成日志與以及報錯文件(mingw64位…

Nginx + Tomcat負載均衡群集

目錄 一、案例環境 二、部署 Tomcat&#xff08;102/103&#xff09; 1、準備環境 &#xff08;1&#xff09;關閉firewalld 防火墻 &#xff08;2&#xff09;安裝JDK 2、安裝配置 Tomcat &#xff08;1&#xff09;Tomcat 的安裝和配置 &#xff08;2&#xff09;移動…

三、元器件的選型

前言&#xff1a;我們確立了題目的功能后&#xff0c;就可以開始元器件的選型&#xff0c;元器件的選型關乎到我們后面代碼編寫的一個難易。 一、主控的選擇 主控的選擇很大程度上決定我們后續使用的代碼編譯器&#xff0c;比如ESP32使用的是VScode&#xff0c;或者Arduino&a…

API是什么意思?如何實現開放API?

目錄 一、API 是什么 &#xff08;一&#xff09;API 的定義 &#xff08;二&#xff09;API 的作用 二、API 的類型 &#xff08;一&#xff09;Web API 1. RESTful API 2. SOAP API &#xff08;二&#xff09;操作系統 API &#xff08;三&#xff09;數據庫 API …

AI生成的基于html+marked.js實現的Markdown轉html工具,離線使用,可實時預覽 [

有一個markdown格式的文檔&#xff0c;手頭只有notepad的MarkdownPanel插件可以預覽&#xff0c;但是只能預覽&#xff0c;不能直接轉換為html文件下載&#xff0c;直接復制預覽的內效果又不太好&#xff0c;度娘也能找到很多工具&#xff0c;但是都需要在線使用。所以考慮用AI…

Java-前置基礎

前言 基礎基礎 package org.example;public class Main {int a 10;String s1 "你好";public static void main(String[] args) {System.out.println(a);System.out.println(s1);} } 發現報錯位置 public class Main {static int a 10;static String s1 "你好…

python字符串方法

1. capitalize&#xff1a; 是第一個字符大寫&#xff0c;其余小寫 2. encode&#xff1a; 將字符串轉換為字節串&#xff08;bytes&#xff09;&#xff0c;默認使用 UTF-8 編碼。 3. format&#xff1a; format是 Python 中字符串對象的內置方法&#xff0c;語法為S.form…

Java詳解LeetCode 熱題 100(24):LeetCode 234. 回文鏈表(Palindrome Linked List)詳解

文章目錄 1. 題目描述1.1 鏈表節點定義 2. 理解題目2.1 回文鏈表的特征2.2 核心難點 3. 解法一&#xff1a;轉換為數組法3.1 算法思路3.2 詳細圖解3.3 Java代碼實現3.4 詳細執行過程演示3.5 執行結果示例3.6 使用數組而非ArrayList的優化版本3.7 復雜度分析3.8 優缺點分析 4. 解…

平板電腦如何通過EN 18031認證

平板電腦若需通過 EN 18031 認證&#xff08;歐盟無線電設備網絡安全標準&#xff0c;屬于 CE RED 指令的一部分&#xff09;&#xff0c;需滿足其針對互聯網連接設備和數據處理設備的安全要求。以下是詳細的認證流程、技術要求和操作指南&#xff1a; 一、認證背景與法規基礎…

KaiwuDB在邊緣計算領域的應用與優勢

KaiwuDB 在邊緣計算場景中主要應用于 工業物聯網&#xff08;IIoT&#xff09;、智能電網、車聯網 等領域&#xff0c;通過其分布式多模架構和輕量化設計&#xff0c;在邊緣側承擔 數據實時處理、本地存儲與協同分析 的核心作用。以下是具體案例和功能解析&#xff1a; 1. 典型…

MP4文件聲音與視頻分離

最近學習PR剪輯 要添加視頻文件和音頻文件 但是直接給MP4文件 得到的是一個整體 不管怎么切分 都是無法得到單獨的整體 這就需要將視頻文件和音頻文件分離 我推薦使用ffmpeg工具進行分離 夸克鏈接&#xff1a;https://pan.quark.cn/s/8dbc3bfbc5d4 百度鏈接: https://pan.ba…

山洪徑流過程及洪水淹沒數值模擬

氣候變化背景下&#xff0c;極端天氣導致的洪水事件將更加頻發。快速城市化對流域下墊面的改變&#xff0c;及人類活動向洪泛區的擴張。二者共同使得全世界多數人類活動高度聚集區的洪水風險增加。洪水淹沒危險性&#xff08;各種年遇型洪水淹沒&#xff09;是洪水損失評估、風…

Rust 通用代碼生成器:蓮花,紅蓮嘗鮮版三十六,圖片初始化功能介紹

Rust 通用代碼生成器&#xff1a;蓮花&#xff0c;紅蓮嘗鮮版三十六&#xff0c;圖片初始化功能介紹 Rust 通用代碼生成器蓮花&#xff0c;紅蓮嘗鮮版三十六。支持全線支持圖片預覽&#xff0c;可以直接輸出帶圖片的啞數據模式快速原型。啞數據模式和枚舉支持圖片。啞數據和枚…

Mysql中select查詢語句的執行過程

目錄 1、介紹 1.1、組件介紹 1.2、Sql執行順序 2、執行流程 2.1. 連接與認證 2.2. 查詢緩存 2.3. 語法解析&#xff08;Parser&#xff09; 2.4、執行sql 1. 預處理&#xff08;Preprocessor&#xff09; 2. 查詢優化器&#xff08;Optimizer&#xff09; 3. 執行器…

Acrobat DC v25.001 最新專業版已破,像word一樣編輯PDF!

在數字化時代&#xff0c;PDF文件以其穩定性和通用性成為了文檔交流和存儲的熱門選擇。無論是閱讀、編輯、轉換還是轉曲&#xff0c;大家對PDF文件的操作需求日益增加。因此&#xff0c;一款出色的PDF處理軟件不僅要滿足多樣化的需求&#xff0c;還要通過簡潔的界面和強大的功能…

CSS中justify-content: space-between首尾貼邊中間等距(兩端元素緊貼左右邊緣,中間元素等距均勻分布)

justify-content: space-between; 是 CSS Flexbox 布局中的一個屬性值&#xff0c;主要作用是在彈性容器的主軸方向上均勻分布子元素&#xff0c;具有以下核心特性&#xff1a; 作用效果&#xff1a; 首尾貼邊 第一個子元素緊貼容器起始端 最后一個子元素緊貼容器結束端 中…

Web 架構之 CDN 加速原理與落地實踐

文章目錄 一、思維導圖二、正文內容&#xff08;一&#xff09;CDN 基礎概念1. 定義2. 組成部分 &#xff08;二&#xff09;CDN 加速原理1. 請求路由2. 內容緩存3. 內容更新 &#xff08;三&#xff09;CDN 落地實踐1. 選擇 CDN 服務商2. 配置 CDN3. 集成到 Web 架構 &#xf…

全球知名具身智能/AI機器人實驗室介紹之AI FACTORY基于慕尼黑工業大學

全球知名具身智能/AI機器人實驗室介紹之AI FACTORY基于慕尼黑工業大學 TUM AI FACTORY&#xff0c;即KI.FABRIK&#xff0c;是德國慕尼黑工業大學&#xff08;TUM&#xff09;在巴伐利亞州推出的一個旗艦項目&#xff0c;旨在打造未來工廠&#xff0c;將傳統工廠轉變為由人工智…