朋友们,我在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));
答案 0 :(得分: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 });
这样你的右边缘总是显示最长时间,图表的其余部分将从右向左移动。
希望它有所帮助。
答案 1 :(得分:0)
如果您希望移动图表,则需要按原样添加新数据。一旦图表已满(具有您想要的多个点),您需要开始删除最旧的点。这将为您提供一个窗口,显示最新的X点数。
如果您正在使用TimeSeries,我认为您使用时应该可以致电timeSeries.setMaximumItemCount(maxNumPoints)
,时间序列将负责其余部分。
希望这会有所帮助。
答案 2 :(得分:0)
让图表自动计算其最小和最大轴的简单方法是将它们设置为最小值和最大值,然后重新绘制。例如:
mRenderer.setXAxisMax(-Double.MAX_VALUE);
mRenderer.setXAxisMin(Double.MAX_VALUE);
mRenderer.setYAxisMax(-Double.MAX_VALUE);
mRenderer.setYAxisMin(Double.MAX_VALUE);
mChartView.repaint();
我不知道它是否是最佳选项,但它对我有用!
参考: My Android AChartEngine is already working, but how to make it look good?
答案 3 :(得分: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++;
}