Синхронизированные графики или несколько графиков, таких как Highcharts в Android

Как мы можем достичь Synchronized charts в Android,

Для моей веб-страницы я использовал Highcharts API. Есть ли аналогичная вещь для Android. Я проверил различные библиотеки, упомянутые здесь, но не нашел ни одной, которая соответствовала бы требованию.

Я не хочу комбинированные графики, как это и это. Я ищу синхронизированные графики.

Есть ли библиотека, которая будет соответствовать требованию или я должен пойти с webView (Это худший случай для меня)

Это возможно с MPAndroidChart?

РЕДАКТИРОВАТЬ:

Результирующий график должен быть похож на график, приведенный на странице высоких графиков.

Образец:

введите описание изображения здесь

ОБНОВИТЬ

Девиз не просто нарисовать 3 графика. Цель состоит в том, чтобы синхронизировать их. Синхронизация означает, что все 3 диаграммы имеют одинаковую ось х (значения), при щелчке в любой точке этих диаграмм график в этой конкретной точке должен быть выделен на всех диаграммах. Я уверен, что я не объяснил это должным образом. Пожалуйста, проверьте эту ссылку и наведите график

3 ответа

Решение

При щелчке на графике 1 получите точки X и Y и выделите их на графике 2. То же самое со вторым графиком.

    lineChart1.setOnChartValueSelectedListener(new OnChartValueSelectedListener()
    {
        @Override
        public void onValueSelected(Entry e, Highlight h)
        {
            lineChart2.highlightValue(e.getX(),e.getY(),0,false);
        }

        @Override
        public void onNothingSelected()
        {
        }
    });


    lineChart2.setOnChartValueSelectedListener(new OnChartValueSelectedListener()
    {
        @Override
        public void onValueSelected(Entry e, Highlight h)
        {
            lineChart1.highlightValue(e.getX(),e.getY(),0,false);
        }

        @Override
        public void onNothingSelected() {
        }
    });

ПРИМЕЧАНИЕ установите последний аргумент в значение false, чтобы он не вызывал слушателя снова и снова. Если это не установлено, то это приводит к взаимоблокировке.

Пример приложения имеет хорошее отображение функций, доступных вам "из коробки" с помощью MPAndroidChart.

Как вы можете видеть, в ListView есть пример нескольких диаграмм, которые кажутся близкими к вашим требованиям.

3 графика одна поверх другой согласно требованию ОП

Аналогично, исходный код доступен на GitHub для вас, чтобы вы могли проверить и посмотреть, есть ли у него доступные классы и методы для того, чтобы вы могли делать то, что вы хотите из коробки.

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

В вашем конкретном случае кажется, что вы хотите какую-то координацию между графиками. Так что если вы нажмете на одну из них, то MarkerView появляется на всех в том же xIndex в DataSet.

Чтобы попытаться это сделать, вы должны начать с просмотра кода для OnChartGestureListener, Решение может быть получено с помощью событийного программирования. Вы бы настроить 3 реализации OnChartGestureListener который использовал бы события для передачи текущего жеста посреднику, который затем запускает те же самые жесты на двух других графиках. Например, внутри OnChartGestureListener есть метод для реализации, который называется:

void onChartScale(MotionEvent var1, float var2, float var3);

Ваша реализация будет выглядеть примерно так:

@Override
void onChartScale(MotionEvent var1, float var2, float var3) {
    //transmit event to mediator 
    //handle event for this chart
}

Если это слишком сложно, то вам придется придерживаться Highcharts внутри WebView как вы сами убедительно предположили. Тем не менее, имейте в виду, что производительность внутри WebView будет не так хорошо, как использование библиотеки, которая визуализирует данные напрямую в canvas.

Короче говоря, возможно, хотя и сложно, выполнить то, что вы хотите, используя MPAndroidChart и нет готового решения.

Вы можете сделать это с помощью библиотеки MPAndroidCharts.

Перейти к 1> LineChart (с легендой, простой дизайн) для скорости 2> LineChart (кубические линии) / (градиентная заливка) для Elevation, Heart

При использовании градиентной заливки примените это, чтобы устранить пунктирную линию и нарисовать прямую линию:

    lineDataSet.enableDashedLine(0f, 0f, 0f);
    lineDataSet.enableDashedHighlightLine(0f, 0f, 0f);
Другие вопросы по тегам