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

介绍

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

效果图预览

使用说明

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

实现思路

  1. 健身记录部分:使用柱状图描述近七日每日的热量消耗情况,主要实现点在于柱状图的创建过程。
  • 初始化图表配置构建类
ts 复制代码
  // 初始化图表配置构建类
  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);
  • 限制线的设置
ts 复制代码
  // 为左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轴设置
ts 复制代码
  // 设置图表左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());
  }
  • 绑定图表数据
ts 复制代码
  // 生成数据
  this.data = this.getNormalData();
  // TODO 知识点:将数据与图表配置类绑定
  this.model.setData(this.data);
  1. 健康数据部分:使用曲线图展示每日的热量消耗情况,主要实现点在于曲线图的创建过程。
  • 初始化图表配置构建类
ts 复制代码
  // 初始化图表配置构建类
  this.model = new LineChartModel();
  this.model.setPinchZoom(false);
  this.model.setDrawGridBackground(false);
  • X轴Y轴设置
ts 复制代码
  // 设置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);
  }
  • 图表图例部分
ts 复制代码
  // 获取图表图例部件,设置图表图例部件不可用
  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);
  }
  • 绑定图表数据
ts 复制代码
  // 生成数据
  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.鸿蒙南向开发方向

相关推荐
变色龙云40 分钟前
网页生成鸿蒙App
华为·harmonyos
s_daqing42 分钟前
华为手机鸿蒙4.2连接不上adb
华为·智能手机·harmonyos
Jack_pirate1 小时前
深度学习中的特征到底是什么?
人工智能·深度学习
ThisIsClark1 小时前
【后端面试总结】深入解析进程和线程的区别
java·jvm·面试
Lucky me.1 小时前
鸿蒙开发使用axios请求后端网络服务出现该错误
华为·harmonyos
微凉的衣柜1 小时前
微软在AI时代的战略布局和挑战
人工智能·深度学习·microsoft
_Shirley1 小时前
鸿蒙设置app更新跳转华为市场
android·华为·kotlin·harmonyos·鸿蒙
哦哦~9212 小时前
深度学习驱动的油气开发技术与应用
大数据·人工智能·深度学习·学习
测试19983 小时前
外包干了2年,技术退步明显....
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
Aphasia3113 小时前
一次搞懂 JS 对象转换,从此告别类型错误!
javascript·面试