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 聊聊, 查看更多联系方式