1

嗨朋友们,我在我的 android 应用程序中使用了图表。在那我每秒更新一次图表。现在我想在它更新值时从右到左移动这个图表。有人知道怎么做吗?任何帮助表示赞赏。

 dataset = new XYMultipleSeriesDataset();

         renderer = new XYMultipleSeriesRenderer();

         renderer.setChartTitleTextSize(12);
         renderer.setLabelsTextSize(15);
         renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));
         renderer.setApplyBackgroundColor(true);
         renderer.setBackgroundColor(Color.TRANSPARENT);
         renderer.setZoomEnabled(false, false);
         renderer.setPointSize(5f);
         renderer.setShowGrid(true);
         renderer.setXTitle("Time");
         renderer.setYTitle("Number");

         rendererSeries = new XYSeriesRenderer();

         rendererSeries.setColor(Color.BLUE);
         rendererSeries.setFillBelowLine(false);
         rendererSeries.setFillPoints(true);
         rendererSeries.setPointStyle(PointStyle.CIRCLE);
         renderer.addSeriesRenderer(rendererSeries);

         timeSeries = new TimeSeries("Random");
         mThread = new Thread(){
             public void run(){
                 while(true){
                     try {
                         Thread.sleep(2000L);
                     } 
                     catch (InterruptedException e) {
                         e.printStackTrace();
                     }

                     timeSeries.add(new Date(), random.nextInt(10));
                     mchartView.repaint();
                 }
             }
         };
         mThread.start();

         dataset.addSeries(timeSeries);
         mchartView = ChartFactory.getLineChartView(Pedometer.this, dataset, renderer);
         mchartView.refreshDrawableState();
         mchartView.repaint();

         llChart.addView(mchartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
4

4 回答 4

2

您可以在每次添加新点时使用 setRange 设置所需的范围。例如:

double maxX = timeSeries.getMaxX();
double minX = maxX - deltaX; // deltaX is your required x-range
double maxY = timeSeries.getMinY();
double minY = timeSeries.getMaxY();

renderer.setRange(new double[] { minX, maxX, minY, maxY });

这样,您的右边缘始终显示最大时间,而图表的其余部分将从右向左移动。

希望能帮助到你。

于 2012-05-31T07:24:36.417 回答
0

如果您希望图表移动,您需要在执行过程中添加新数据。一旦图表已满(有尽可能多的点),您需要开始删除最旧的点。这将为您提供一个显示最新 X 点数的窗口。

如果您使用的是 TimeSeries,我认为您应该能够调用timeSeries.setMaximumItemCount(maxNumPoints),而时间序列将负责其余的工作。

希望这可以帮助。

于 2012-05-29T18:44:22.657 回答
0

让图形自动计算其轴最小值和最大值的一种简单方法是将它们设置为最小值和最大值,然后重新绘制。例如:

mRenderer.setXAxisMax(-Double.MAX_VALUE);
mRenderer.setXAxisMin(Double.MAX_VALUE);
mRenderer.setYAxisMax(-Double.MAX_VALUE);
mRenderer.setYAxisMin(Double.MAX_VALUE);

mChartView.repaint();

我不知道这是否是最好的选择,但它对我有用!

参考: 我的 Android AChartEngine 已经可以工作了,但是如何让它看起来不错呢?

于 2012-10-19T15:07:39.027 回答
0

在我的代码中,我提出了以下想法:

    private void animatePlot(float t, float[] v) {
            // moving plot
            datasets[i].add(t, v[i]);
            if (mPointsCount > GRAPH_RESOLUTION)
                datasets[i].remove(0);
            view.repaint();
            mPointsCount++;
    }
  • t 和 v 对应于 x,y 绘图值。
  • t 正在增长。
  • 当我得到新数据(t 和 v)时,我调用这个函数。
  • GRAPH_RESOLUTION 是图中显示的点数,绘图从该点开始向左移动。
于 2015-10-22T10:34:55.800 回答