我在我的应用程序中使用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相同)。
有人可以帮我解决这个问题吗?