4

Android 用の aChartEngine の 0.7.0 チャート作成ライブラリを使用しています。新しいデータを受信すると、約 1 秒ごとに動的に変化する XY チャートが動作しています。ただし、折れ線グラフは左から右に描画され、最終的には表示されなくなります。描画されている新しいデータを確認する唯一の方法は、チャート ビューを右にスクロールすることです。

古いデータが最終的にビューの外にスクロールするように、線の左側に新しいデータを描画する方法を知っている人はいますか? 基本的に、チャートラインの方向を逆にする?

4

3 に答える 3

3

私のコード:

 private XYMultipleSeriesDataset HRDataset = new XYMultipleSeriesDataset();
 private XYMultipleSeriesRenderer HeartRateRenderer = new XYMultipleSeriesRenderer();
 private XYSeries HRCurrentSeries;
 private GraphicalView HRChartView;

onResume() で:

  if (HRChartView == null) {
        LinearLayout layout = (LinearLayout) findViewById(R.id.HRchart);
        HRChartView = ChartFactory.getLineChartView(this, HRDataset, HeartRateRenderer);

        layout.addView(HRChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
       // boolean enabled = HRDataset.getSeriesCount() > 0;
      //  setSeriesEnabled(enabled);
      } else {
        HRChartView.repaint();
      }

onCreate() で:

    HeartRateRenderer.setAxisTitleTextSize(16);
    HeartRateRenderer.setChartTitleTextSize(20);
    HeartRateRenderer.setLabelsTextSize(15);
    HeartRateRenderer.setLegendTextSize(15);
    HeartRateRenderer.setMargins(new int[] {20, 30, 15, 0});
    HeartRateRenderer.setAxesColor(Color.YELLOW);

    String seriesTitle = "Heart Rate";
    XYSeries series = new XYSeries(seriesTitle);

    HRDataset.addSeries(series);
    HRCurrentSeries = series;

    XYSeriesRenderer renderer = new XYSeriesRenderer();
    renderer.setColor(Color.RED);
    HeartRateRenderer.addSeriesRenderer(renderer);      

Blue Tooth デバイスからデータを受信するサービスがあります。新しいデータが到着したら、次の関数を呼び出します。

public void setupHRChart(double x, double y)
{

    HRCurrentSeries.add(x, y);


    if (HRChartView != null) {
        HRChartView.repaint();
    }

}

マニフェストで:

   <activity android:name="org.achartengine.GraphicalActivity" />

私のレイアウトで:

   <LinearLayout android:id="@+id/HRchart" android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="300px"  android:layout_weight="1" />

-お役に立てば幸いです。

于 2011-09-22T01:05:54.603 に答える
1

私は実際に、aChartEngine のダイナミック ライン チャートの自然な流れの方向に従うことにしました。グラフの画像をロックして、行が画面からスクロールして見えなくなることがないようにしました。また、グラフが大量の線に圧縮されることなく、特定の期間が表示されるように、シリーズの先頭から項目を削除します。それは実際には非常にうまく機能します。

これは、実際のチャートを示す YouTube ビデオです: http://www.youtube.com/watch?v=mZMrOc5QaG0

于 2011-09-23T17:35:31.330 に答える
1

また、シリーズの最初からアイテムを削除して、特定の期間を表示できるようにします

このソリューションの問題は、実際にデータを失うことです...

次のようにレンダラーの setXAxisMax と setXAxisMin を使用するのはどうですか:

0) XAxisMax を 10 などの値に設定し、XAxisMin の値を 0 に設定します。

1) xTick 変数の「ティック」を数える

2) xTick が > XAxisMax の場合:

2.1) XAxisMax を xTick に設定します

2.2) XAxisMin を + 1 に設定します

3) グラフを再度レンダリングする

このようにして、グラフの「見える部分」を実際にシフトしますが (Xmin と Xmax をいじって)、データを失うことはありません (つまり、スクロールして前のデータポイントを表示することができます)。

renderer.setXAxisMin(0.0);
renderer.setXAxisMax(10);
xTick = 0;
lastMinX = 0;   
private void refreshChart(double lastValue) {
/* check if we need to shift the x axis */
    if (xTick > getRenderer().getXAxisMax()) {
        getRenderer().setXAxisMax(xTick);
        getRenderer().setXAxisMin(++lastMinX);
    }
    series.add(xTick++, lastValue);
    mChartView.repaint();
}
于 2011-10-05T12:37:56.890 に答える