Динамическая загрузка большего количества данных в линейной диаграмме с использованием библиотеки MPAndroidChart - PullRequest
0 голосов
/ 30 сентября 2018

Я использую библиотеку MPAndroidChart в своем приложении для визуализации линейной диаграммы и столкнулся с проблемой при динамическом добавлении дополнительных данных в диаграмму.Я попытался просмотреть существующие вопросы StackOverflow, а также проблемы с GitHub для этой библиотеки, но не смог найти решение своей проблемы.

Я использую API LineChart.В моем случае мне нужно сначала показать 15 точек данных на графике, и как только пользователь прокрутит до границы, я получаю еще 15 точек данных из бэкэнда и сбрасываю объект данных с набором из 30 точек данных.

Моя логика для проверки, достиг ли пользователь границы:

@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 раза), и диаграмма рисует больше данных.

При отладке этого Iзаметил, что метод lineChart.getHighestVisibleX () возвращает неправильное значение, иногда вызывая это.

Например, первый вызов срабатывает, когда самый высокийVisibleX равен значению maxX, равному 14. Это обновляет диаграмму новымточек данных (теперь 30), и во время перерисовки диаграммы вызывается метод onTranslate, и самый высокийVisibleX каким-то образом возвращает 29 (то же самое значение, что и maxX для новых данных), даже если наибольшее видимое значение x равно 14.

Может кто-нибудь помочь мне с этим вопросом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...