Android aChartEngine XY图表

时间:2011-09-20 20:12:23

标签: achartengine

我正在使用针对Android的aChartEngine的0.7.0图表库。我有一个工作的XY图表,当接收到新数据时,它会每秒动态变化。但是,它从左到右绘制折线图,​​最终移出视图。查看新数据的唯一方法是向右滚动图表视图。

有没有人知道如何让线条在左侧绘制新数据,以便旧数据最终滚出视图。基本上,扭转图表线的方向?

3 个答案:

答案 0 :(得分: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" />

- 希望有所帮助。

答案 1 :(得分:1)

我实际上决定采用aChartEngine动态折线图的自然流向。我能够锁定图形图像,这样线条就不再滚出屏幕了。我还从序列的开头删除项目,以保持一定的时间跨度可见,而图形压缩成大量的行。它确实很有效。

以下是展示行动图表的YouTube视频:http://www.youtube.com/watch?v=mZMrOc5QaG0

答案 2 :(得分:1)

  

我还会从系列的开头删除项目,以保持一定的时间范围可见

此解决方案的问题在于您实际上是在丢失数据......

如何使用渲染器的setXAxisMax和setXAxisMin如下:

0)将XAxisMax设置为一个值,比如说10并将XAxisMin值设置为0

1)计算xTick变量中的“ticks”

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();
}