1

このスクリーンショットのように、chartengine グラフに問題があります。

壊れたレイアウト

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 クラスは、代わりに BarChart を拡張する単純な変更を加えた TimeChart に他なりません。コードは 0.7 リビジョンからコピーされます。とにかく、以前は ChartFactory#getTimeChartView() を使用していましたが、結果は同じだったので、これが問題の原因ではありません。
  • 高さレイアウト パラメータが問題を引き起こしているかどうかを確認しようとしましたが、そうではありませんでした。
  • GraphHolder は RoboGuice によって注入されます。
  • この問題は 2.3 エミュレータで発生しました。

明らかに、私は何か間違ったことをしていますが、私は途方に暮れています。どんな助けでも大歓迎です。

PS。私はそれを achartengine グループに投稿しようとしましたが、モッズは冬の間冬眠しているようです ;)。

4

1 に答える 1

0

私はついにこれを再調査する時間があり、それを理解しました。

要旨:

下部のバーは凡例です。コードにバグがあり、データポイントごとにシリーズが作成されたため、実際には凡例のグラフィックで複数の「バー」が作成されました。シリーズには名前がなく、混乱を招きました。

バグを修正し、setShowLegend(false) を追加することで問題が解決されました。

AndroidPlotを評価しているときにこれを発見しました(ところで、グラフは XML で定義でき、スクリーンショットが示唆するよりもはるかに自由にグラフィカルにカスタマイズできるため、chartengine の代わりとしてお勧めします)。

chartengine のスクリーンショットでは凡例に気付きませんでしたが、AndroidPlot では認識できました。そして、はい、私は今かなりばかげていると感じています:)。

于 2012-02-19T19:52:05.463 に答える