Android MPAndroidChart 动态显示曲线数据

文章目录

    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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式