2017-01-04 3 views
0

Как мы можем достичь Synchronized charts в Android.Синхронизированные диаграммы или несколько диаграмм, таких как Highcharts в Android

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

Мне не нужны комбинированные диаграммы, такие как this и this. Я ищу Синхронизированные диаграммы.

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

Можно ли с MPAndroidChart?

EDIT:

Результирующая диаграмма должна быть как Графики, приведенные в highcharts странице

Образец:

enter image description here

UPDATE

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

+0

Укажите, какой тип диаграммы вы хотите подготовить, я имею в виду изображение или что-то, что может дать правильную идею. –

+0

@DeepPatel Обновлено. Теперь я пытаюсь нарисовать 2 линейные диаграммы, поместить их под другой, использовать один и тот же набор данных по оси x и попробовать некоторую логику по маркерам, я имею в виду щелчок в любой точке. Не знаю, к чему это приводит. Я пытаюсь сделать это сейчас – Prabs

+0

проверить мой ответ ниже –

ответ

1

при нажатии на диаграмме 1 получите точки X и Y и выделите их на диаграмме 2. То же самое со 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() { 
     } 
    }); 

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

-1

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

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

при использовании gradientFill применить это устранить пунктирная линия и нарисовать прямую линию:

lineDataSet.enableDashedLine(0f, 0f, 0f); 
    lineDataSet.enableDashedHighlightLine(0f, 0f, 0f); 
+0

Я закончил с линейными графиками @DeepPatel. Мой вопрос: «Как синхронизировать их». – Prabs

1

sample app имеет хорошее отображение функций, доступных для вас «из коробки» с MPAndroidChart.

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

3 charts one on top of the other as per OP's requirement

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

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

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

Чтобы сделать это, начните, посмотрев код для OnChartGestureListener. Раствор можно получить, используя event-driven programming. Вы бы установили 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 не будет такой хорошей, как использование библиотеки, которая напрямую отображает холст.

Короче говоря, возможно, хотя сложно, чтобы выполнить то, что вы хотите, с помощью MPAndroidChart и без решения «из коробки».

+0

Я сделал до получения диаграмм и построения точки оси. Но я застрял с маркерами. Предыдущая версия 'MPAndroidChart' была очень удобна для меня. Теперь я буквально борюсь с этим. Но, тем не менее, я понял, что эта задача требует больших усилий и может быть достигнута с помощью указаний, приведенных вами – Prabs

+0

, и все в порядке, но как я могу назвать два экземпляра маркера одновременно – Prabs

+0

Думаю, вам придется использовать 'getHighlighter 'на целевом графике, а затем' updateHighlighted' –

Смежные вопросы