使用MPAndroidChart库在折线图中动态加载更多数据

时间:2018-09-29 21:55:25

标签: android mpandroidchart linechart

我在我的应用程序中使用MPAndroidChart库来绘制折线图,​​并且在向图表动态添加更多数据时遇到问题。我尝试解决了该库中现有的StackOverflow问题以及GitHub问题,但找不到针对我的问题的修复程序。

我正在使用LineChart API。在我的用例中,我需要首先在图表上显示15个数据点,然后,当用户滚动到边界时,我将从后端获取15个数据点,并用30个数据点的集合重置数据对象。 / p>

我检查用户是否到达边界的逻辑是:

@Override
onChartTranslate {
    .
    .
    if (!isLoading) {
        if (lineChart.getHighestVisibleX() == lineChart.getXChartMax()) {
            isLoading = true;
            fetchMoreData();
        }
    }
    .
    .
}

以下方法从后端获取数据,然后更新图表

fetchMoreData {
    dataObservable.subscribe(newData -> updateUI(newData))
}

带有其他数据的更新图表方法

updateUI(newData) {
    //from the data received, create new dataset,
    //create a new lineData Object, and add this dataSet
    //set the lineData object on the chart using 
    lineChart.setData(newLineDataSet)

    //view port updates which consist of below
    lineChart.setVisibleXRangeMinimum(4);
    lineChart.setVisibleXRangeMaximum(4);
    lineChart.setAutoScaleMinMaxEnabled(true);

    lineChart.moveViewToX(previousBoundary)

    lineChart.highlightValue(previouslyHighlightedValue)

    isLoading = false
}

当我缓慢滚动到边界之外时,事情对我来说很好,即,触发了获取其他数据的后端调用,并且我得到了新的15个数据点,并且用新的lineData对象替换了现有的lineData对象,该对象具有(旧+新)数据点。

如果滚动速度太快,fetchMoreData被调用多次(2/3次),图表会绘制更多数据,那么我将面临一个问题。

在调试时,我注意到lineChart.getHighestVisibleX()方法返回的错误值有时会导致这种情况的发生。

例如,当highestVisibleX等于maxX值14时,将触发第一个调用。这将使用新的数据点(现在为30)更新图表,并在重绘图表期间,调用onTranslate方法,并以某种方式调用highestVisibleX即使最高可见x值为14,也返回29(与新数据的maxX相同)。

有人可以帮我解决这个问题吗?

0 个答案:

没有答案