Я хочу интегрировать простой график XY в мою активность. В поисках бесплатных графиков с настройками (настраиваемые фоны, цвета, метки осей) я нашел двух кандидатов: Achartengine и Adnroidplot. Были некоторые другие библиотеки, но они не были настраиваемыми или доступны только как отдельные Intents.
Мне также нужна поддержка более старого Android API (должна быть поддержана как минимум 1.6).
Я попробовал Achartengine, но у меня не получилось, когда я интегрировал его в ScrollView. Когда я прокручивал, диаграмма как-то повредилась, сжалась, и некоторые элементы фона, казалось, отошли.
Тогда я попробовал Adnroidplot. Сначала он не запустился на 1.6 из-за класса Pair. Но я нашел решение проблемы на форуме Adnroidplot. Казалось, что все работает нормально, также динамические обновления, хотя пользовательские Обозреватели работали нормально. Было немного сложно настроить метки оси X (мне нужны были пользовательские строки там, а не числа), но с помощью специального форматера я наконец сделал это.
Но потом я попробовал это с реальными данными из базы данных клиента. Было несколько серий точек с одинаковыми значениями. И я был шокирован, увидев, что Adnroidplot не умеет рисовать горизонтальную линию, он зависает или полностью портит график!
Вот тестовый пример, я позаимствовал его у Adnroidplot Quickstart и сделал небольшую модификацию, чтобы сделать одну серию с равными значениями:
pricesPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);
// Create array of y-values to plot:
Number[] series1Numbers = {7, 7}; // horizontal line expected, got nothing or hang
// Turn the above arrays into XYSeries:
XYSeries series1 = new SimpleXYSeries(
Arrays.asList(series1Numbers), // SimpleXYSeries takes a List so turn our array into a List
ArrayFormat.Y_VALS_ONLY, // Y_VALS_ONLY means use the element index as the x value
"Series1"); // Set the display title of the series
// Create a formatter to use for drawing a series using LineAndPointRenderer:
LineAndPointFormatter series1Format = new LineAndPointFormatter(
Color.rgb(0, 200, 0), // line color
Color.rgb(0, 100, 0), // point color
null); // fill color (optional) <- my app hangs if I add it for a horizontal line
// Add series1 to the xyplot:
pricesPlot.addSeries(series1, series1Format);
// Reduce the number of range labels
pricesPlot.setTicksPerRangeLabel(3);
// By default, AndroidPlot displays developer guides to aid in laying out your plot.
// To get rid of them call disableAllMarkup():
pricesPlot.disableAllMarkup();
Я уже писал на форумах Adnroidplot, но я не уверен, насколько быстро они ответят и когда проблема будет решена.
Так что я надеюсь, что кто-то в StackOverflow может найти обходной путь для этого?