我想在我的活动中集成一个简单的 XY 折线图。在寻找可定制的免费图表(可定制的背景、颜色、轴标签)时,我发现了两个候选者:Achartengine 和 Adnroidplot。还有一些其他库,但它们不可定制或仅作为单独的 Intent 提供。
我还需要支持较旧的 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 的某个人可能知道一些解决方法?