1

我对 achartengine 图表有疑问 - 如此屏幕截图所示:

破碎的布局

看起来 X 轴的底部填充过多,并且值是重复的(每个值的一个表示在适当的图表中,并且对平移做出正确反应,而另一个位于图表视图的底部,但是不能以任何方式操纵)。

这是用于创建图表的代码:

protected void onCreate(Bundle savedInstanceState) {
        ...
        gDataset = new XYMultipleSeriesDataset();

        gRenderer = new XYMultipleSeriesRenderer();
        gRenderer.setApplyBackgroundColor(true);
        gRenderer.setPointSize(10);

        chart = new TimeBarChart(gDataset, gRenderer);
        graphView = new GraphicalView(this, chart);
        graphHolder.addView(graphView);
        //Mode is just an internal enum
        chart.setDateFormat(curMode == Mode.DAY ? "HH:mm dd.MM.yyyy" : "dd.MM.yyyy");
        ....
}

并填充它:

...
//some DB stuff goes here, result is the cursor

curSeries = new XYSeries("");
gDataset.addSeries(curSeries);

XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.RED);
renderer.setPointStyle(PointStyle.POINT);
gRenderer.addSeriesRenderer(renderer);
while (!result.isAfterLast()) {
    .....
    curSeries.add(timestamp,value);
      ....
}
.....
graphView.invalidate();
graphView.repaint();

这是布局 XML 中图形持有者的视图定义(主容器当然是 RelativeLayout):

<LinearLayout
    android:id="@+id/graphHolder"
    android:layout_width="fill_parent"
    android:layout_height="200dp"
    android:layout_alignParentTop="true"
    android:minHeight="200dp">
</LinearLayout>

有几件事:

  • 我正在使用 0.7 版本。
  • TimeBarChart 类只不过是一个 TimeChart,只需简单地更改即可扩展 BarChart。代码是从 0.7 修订版复制而来。无论如何,我之前使用的是 ChartFactory#getTimeChartView() 并且结果是相同的 - 所以这不是问题的原因。
  • 我试过检查 height 布局参数是否会导致问题,但事实并非如此。
  • graphHolder 由 RoboGuice 注入。
  • 在 2.3 模拟器中遇到了问题。

显然,我做错了什么,但我不知所措。任何帮助是极大的赞赏。

PS。我试图将其发布在 achartengine 组上,但看起来模组正在冬眠;)。

4

1 回答 1

0

我终于有时间重新调查这一点,并弄清楚了。

要旨:

底部的条是图例。我的代码中有一个错误,导致它为每个数据点创建一个系列,因此实际上是图例图形中的多个“条”。该系列没有名称,这增加了混乱。

修复错误并添加 setShowLegend(false) 处理了该问题。

我在评估AndroidPlot时发现了这一点(顺便说一句,我推荐它作为 achartengine 的替代品,因为图形可以在 XML 中定义,并且可以比屏幕截图更自由地自定义图形)。

我不知何故没有注意到 achartengine 屏幕截图中的图例,但我在 AndroidPlot 中认出了它们。是的,我现在确实觉得很愚蠢:)。

于 2012-02-19T19:52:05.463 回答