Android MPAndroidChart 动态显示曲线数据

更新日期: 2024-01-16 阅读次数: 500 字数: 356 分类: Android

MPAndroidChart 的示例大多数静态图表,没有实时显示曲线的变化的示例。

找到一个官方的说明:

https://github.com/PhilJay/MPAndroidChart/wiki/Dynamic-&-Realtime-Data

there are various methods that allow to either add or remove Entry objects to an existing DataSet or DataSet objects to/from an existing ChartData object

看来确实可以实现动态修改。

添加数据

DateSet

addEntry(Entry e): Adds the given Entry object to the DataSet.

ChartData

addEntry(Entry e, int dataSetIndex): Adds the given Entry to the DataSet at the specified dataset index.

addDataSet(DataSet d): Adds the given DataSet object to the ChartData object.

删除数据

DataSet

  • removeFirst(): 先进先出,这个满足要求
  • removeLast()
  • removeEntry(Entry e)
  • removeEntry(int xIndex)

ChartData

也有类似的函数。

刷新图表

大致意思就是在刷新 invalidate 之前,需要调用 notifyDataSetChanged

// EXAMPLE 1
// add entries to the "data" object
exampleData.addEntry(...);
chart.notifyDataSetChanged(); // let the chart know it's data changed
chart.invalidate(); // refresh

// EXAMPLE 2
// add entries to "dataSet" object
dataSet.addEntry(...);
exampleData.notifyDataChanged(); // let the data know a dataSet changed
chart.notifyDataSetChanged(); // let the chart know it's data changed
chart.invalidate(); // refresh

X 轴的更新问题

虽然,通过 addEntry 和 removeEntry 可以实现数据的实时更新。 但是,X 轴却一直保留着之前的坐标范围。

解决方法:

binding.lineChart.notifyDataSetChanged()
binding.lineChart.setVisibleXRangeMaximum(5f)  // x 轴坐标上显示的总量
binding.lineChart.moveViewToX(binding.lineChart.data.xMax)  // 视图滚动到最新的 Entry
binding.lineChart.invalidate()

因为 X 轴最大的值,就是最新的值,所以这个方法是有效的。

时间戳作为 X 轴坐标

https://stackoverflow.com/questions/65521991/add-x-axis-as-datetime-label-in-mpandroidchart-kotlin

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式