广告
返回顶部
首页 > 资讯 > 移动开发 >详解Android图表 MPAndroidChart折线图
  • 369
分享到

详解Android图表 MPAndroidChart折线图

android图表mpandroidchartAndroid 2022-06-06 05:06:27 369人浏览 薄情痞子
摘要

1.介绍 MPAndroidChart GitHub地址  MPAndroidChart的强大之处就不在多说了,目前最新的版本是3.0.1,在新版本中很多方法都被

1.介绍

MPAndroidChart GitHub地址 

MPAndroidChart的强大之处就不在多说了,目前最新的版本是3.0.1,在新版本中很多方法都被弃用了,这个要注意一下,在网上查到的大多数资料都是关于旧版本的,今天来实现一下折线图,把过程记录下来,分享给大家。

效果图:

2.引入开源

项目根目录的build.gradle文件中加入如下代码


allprojects {
  repositories {
    Maven { url "https://jitpack.io" }
  }
}

在app根目录的buil.gradle文件中加入依赖


dependencies {
  compile 'com.github.PhilJay:MPAndroidChart:v3.0.1'
}

3.实现

在项目中,我把图表相关的功能抽取成了一个工具类ChartUtils。

初始化图表

initChart方法用来设置图表的功能和显示的样式,方法中注释了缩放和动画的代码,如果要使用动画,则不需要调用图表的invalidate方法。



public static LineChart initChart(LineChart chart) {
  // 不显示数据描述
  chart.getDescription().setEnabled(false);
  // 没有数据的时候,显示“暂无数据”
  chart.setNoDataText("暂无数据");
  // 不显示表格颜色
  chart.setDrawGridBackground(false);
  // 不可以缩放
  chart.setScaleEnabled(false);
  // 不显示y轴右边的值
  chart.getAxisRight().setEnabled(false);
  // 不显示图例
  Legend legend = chart.getLegend();
  legend.setEnabled(false);
  // 向左偏移15dp,抵消y轴向右偏移的30dp
  chart.setExtraLeftOffset(-15);
  XAxis xAxis = chart.getXAxis();
  // 不显示x轴
  xAxis.setDrawAxisLine(false);
  // 设置x轴数据的位置
  xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
  xAxis.setTextColor(Color.WHITE);
  xAxis.setTextSize(12);
  xAxis.setGridColor(Color.parseColor("#30FFFFFF"));
  // 设置x轴数据偏移量
  xAxis.setYOffset(-12);
  YAxis yAxis = chart.getAxisLeft();
  // 不显示y轴
  yAxis.setDrawAxisLine(false);
  // 设置y轴数据的位置
  yAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
  // 不从y轴发出横向直线
  yAxis.setDrawGridLines(false);
  yAxis.setTextColor(Color.WHITE);
  yAxis.setTextSize(12);
  // 设置y轴数据偏移量
  yAxis.setXOffset(30);
  yAxis.setYOffset(-3);
  yAxis.setAxisMinimum(0);
  //Matrix matrix = new Matrix();
  // x轴缩放1.5倍
  //matrix.postScale(1.5f, 1f);
  // 在图表动画显示之前进行缩放
  //chart.getViewPortHandler().refresh(matrix, chart, false);
  // x轴执行动画
  //chart.animateX(2000);
  chart.invalidate();
  return chart;
}

设置图表数据

setChartData方法用来设置图表显示的数据,以及折线的属性。



public static void setChartData(LineChart chart, List<Entry> values) {
  LineDataSet lineDataSet;
  if (chart.getData() != null && chart.getData().getDataSetCount() > 0) {
    lineDataSet = (LineDataSet) chart.getData().getDataSetByIndex(0);
    lineDataSet.setValues(values);
    chart.getData().notifyDataChanged();
    chart.notifyDataSetChanged();
  } else {
    lineDataSet = new LineDataSet(values, "");
    // 设置曲线颜色
    lineDataSet.setColor(Color.parseColor("#FFFFFF"));
    // 设置平滑曲线
    lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
    // 不显示坐标点的小圆点
    lineDataSet.setDrawCircles(false);
    // 不显示坐标点的数据
    lineDataSet.setDrawValues(false);
    // 不显示定位线
    lineDataSet.setHighlightEnabled(false);
    LineData data = new LineData(lineDataSet);
    chart.setData(data);
    chart.invalidate();
  }
}

更新图表

notifyDataSetChanged方法用来更新图表,可以动态的显示x轴标签。



public static void notifyDataSetChanged(LineChart chart, List<Entry> values,
                    final int valueType) {
  chart.getXAxis().setValueFORMatter(new IAxisValueFormatter() {
    @Override
    public String getFormattedValue(float value, AxisBase axis) {
      return xValuesProcess(valueType)[(int) value];
    }
  });
  chart.invalidate();
  setChartData(chart, values);
}

x轴数据处理

xValuesProcess方法用于处理x轴数据。

x轴可以显示三种类型的数据,分别是今日数据、本周数据、本月数据。



private static String[] xValuesProcess(int valueType) {
  String[] week = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
  if (valueType == dayValue) { // 今日
    String[] dayValues = new String[7];
    long currentTime = System.currentTimeMillis();
    for (int i = 6; i >= 0; i--) {
      dayValues[i] = TimeUtils.dateToString(currentTime, TimeUtils.dateFormat_day);
      currentTime -= (3 * 60 * 60 * 1000);
    }
    return dayValues;
  } else if (valueType == weekValue) { // 本周
    String[] weekValues = new String[7];
    Calendar calendar = Calendar.getInstance();
    int currentWeek = calendar.get(Calendar.DAY_OF_WEEK);
    for (int i = 6; i >= 0; i--) {
      weekValues[i] = week[currentWeek - 1];
      if (currentWeek == 1) {
        currentWeek = 7;
      } else {
        currentWeek -= 1;
      }
    }
    return weekValues;
  } else if (valueType == monthValue) { // 本月
    String[] monthValues = new String[7];
    long currentTime = System.currentTimeMillis();
    for (int i = 6; i >= 0; i--) {
      monthValues[i] = TimeUtils.dateToString(currentTime, TimeUtils.dateFormat_month);
      currentTime -= (4 * 24 * 60 * 60 * 1000);
    }
    return monthValues;
  }
  return new String[]{};
}

在Activity中使用


ChartUtils.initChart(chart);
ChartUtils.notifyDataSetChanged(chart, getData(), ChartUtils.dayValue);

布局文件


<com.github.mikephil.charting.charts.LineChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

4.遇到的问题

在设置x轴水平方向平移时,xAxis.setXOffset()方法不起作用,这让我研究了好长时间,最后无奈使用图表平移方法chart.setExtraLeftOffset()来抵消y轴的平移,已经提交到了Issues上,有解答会在博客中更新。 目前y轴数据只能通过设置最大值、最小值、显示个数的方式来显示数据(如果不设置会自动计算),还没有找到自定义显示数据的方法,有了解的小伙伴可以留言告诉我啊。 自定义x轴数据的时候记得要算好对应的值,Demo中只用到了7个点,所以比较简单,但是x轴数据比较多的话,就要算一下了,如果有不懂的地方可以给我留言或者发私信。

5.写在最后

在实现的过程中,MPAndroidChart的Issues帮了不少忙,有很多人和我遇到了同样的问题,原来没有查阅Issues的习惯,又get新技能一枚。

官方文档

完整的Demo下载

您可能感兴趣的文章:Android自定义可左右滑动和点击的折线图Android绘制动态折线图Android自定义控件实现折线图Android HelloChart开源库图表之折线图的实例代码Android MPAndroidChart开源库图表之折线图的实例代码Android开发实现绘制淘宝收益图折线效果示例Android自定义View简易折线图控件(二)Android自定义View实现折线图效果Android开发之天气趋势折线图MPAndroidChart开源图表库的使用介绍之饼状图、折线图和柱状图Android实现折线走势图


--结束END--

本文标题: 详解Android图表 MPAndroidChart折线图

本文链接: https://www.lsjlt.com/news/22898.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Android图表 MPAndroidChart折线图
    1.介绍 MPAndroidChart GitHub地址  MPAndroidChart的强大之处就不在多说了,目前最新的版本是3.0.1,在新版本中很多方法都被...
    99+
    2022-06-06
    android图表 mpandroidchart Android
  • Android MPAndroidChart --折线图
    主要使用的三方为:MPAndroidChart 1.使用方法:引入依赖或者导入module repositories { maven { url "https://jitpack.io/" } } implementatio...
    99+
    2023-10-03
    android java android studio Powered by 金山文档
  • Android画图实现MPAndroidchart折线图示例详解
    目录效果图依赖activity.xmlMainActivityMyMarkerView 自定义classmaekertextview .xml常用属性效果图 用的是3.1.0的依赖...
    99+
    2022-11-13
  • Android 之MPAndroidChart图表案例
    一 简介 1 图表用于直观的分析数据的分布情况,用于对比数据的大小和趋势。 2 图表的类型也非常多,常见的有折线,柱状,饼状,其它的有面积,散点,股价,雷达,仪表盘,漏斗等。 3 Android也有非常优秀的图表库,比如MPAndroidC...
    99+
    2023-09-12
    android
  • Android图表库HelloChart绘制多折线图
    本文实例为大家分享了Android图表库HelloChart绘制多折线图的具体代码,供大家参考,具体内容如下 一、效果图 二、实现步骤 1.添加依赖库 compile 'com.g...
    99+
    2022-11-13
  • Android LineChart绘制折线图的示例详解
    1.首先在 build.gradle 里导入包 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'&n...
    99+
    2023-03-24
    Android LineChart绘制折线图 Android LineChart折线图 Android LineChart
  • 【Android Studio】第三方库 图表(MPAndroidChart)使用
    1、添加依赖 项目目录->app->build.gradle dependencies {implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'} 项目目录->app->sett...
    99+
    2023-08-19
    android studio android ide
  • Python pyecharts绘制折线图详解
    一、绘制折线图 import seaborn as sns import numpy as np import pandas as pd import matplotlib as m...
    99+
    2022-11-13
  • Android实现双曲线折线图
    本文实例为大家分享了Android实现双曲线折线图的具体代码,供大家参考,具体内容如下 先看一下效果图 1.先下载jar包 mpandroidchartlibrary-2-1-6....
    99+
    2022-11-13
  • Android怎么绘制双折线图
    本篇内容主要讲解“Android怎么绘制双折线图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么绘制双折线图”吧!自定义View实现双折线图,可点击,点击后带标签描述,暂未实现拖...
    99+
    2023-06-29
  • Android实现折线图小工具
    本文实例为大家分享了Android实现折线图小工具的具体代码,供大家参考,具体内容如下 1.LineChart类 public class LineChart extends Vie...
    99+
    2022-11-13
  • MPAndroidChart绘制自定义运动数据图表示例详解
    目录引言TimeAxisSportYAxisCustomLineChart引言 声明:文中的MPChart代指MPAndroidChart. 本系列之前的文章介绍的MPChart中B...
    99+
    2022-11-13
  • Qt实现简单折线图表
    本文实例为大家分享了Qt实现简单折线图表的具体代码,供大家参考,具体内容如下 main.cpp #include <QApplication> #include <...
    99+
    2022-11-13
  • C#折线图控件使用方法详解
    本文实例为大家分享了C#编写折线图控件的具体代码,供大家参考,具体内容如下 简单解说 这是第一次写博客,也是第一次发布自己写代码,有不足之处请多见谅。源代码参考了网络搜索到的一些资源...
    99+
    2022-11-13
  • vue+阿里的G2图表-antv+折线图实例
    目录vue阿里的G2图表-antv+折线图实现效果实现步骤antv g2柱状图与折线图混合使用这是数据这是组件 vue阿里的G2图表-antv+折线图 之前使用的图表是ec...
    99+
    2022-11-13
  • Android绘制双折线图的方法
    本文实例为大家分享了Android绘制双折线图的具体代码,供大家参考,具体内容如下 自定义View实现双折线图,可点击,点击后带标签描述,暂未实现拖动的功能,实现效果如下: 代码如...
    99+
    2022-11-13
  • android绘制曲线和折线图的方法
    本文实例为大家分享了android绘制曲线和折线图的具体代码,供大家参考,具体内容如下 (曲线)  (折线) 1.CurveView.java package com....
    99+
    2022-11-13
  • 基于Echart实现折线图的绘制详解
    效果图 不显示折线图上的拐点方法 ,3个都可以使用,代码中有显示在什么位置使用。 symbolSize:0, symbol:“none”, showSymb...
    99+
    2022-11-13
  • Python可视化Matplotlib折线图plot用法详解
    目录1.完善原始折线图 — 给图形添加辅助功能1.1 准备数据并画出初始折线图1.2 添加自定义x,y刻度1.3 中文显示问题解决1.4 添加网格显示1.5 添加描述信息1.6 图像...
    99+
    2022-11-12
  • python 用matplotlib绘制折线图详情
    目录1. 折线图概述 1.1什么是折线图? 1.2折线图使用场景 1.3绘制折线图步骤 1.4案例展示 2. 折线2D属性 2.1linestyle:折线样式 2.2color:折线...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作