ChartEngine android,每秒从左向右移动一张图表
我想用Android每秒从左向右移动一张图表: 例如,如果第一个值是坐标(0,5),则一秒钟后 从队列中获取一个新值,并在x轴上将其添加到0。 坐标(0,5)现在必须向右移动,以便变为(1,5) 每秒从队列中提取一个y值,因此折线图应每秒移动一次 使用ChartEngine框架执行此操作的最佳方法是什么? 我试着每秒重新绘制图表和它的所有值,但我想有一种更好、性能更友好的方法可以做到这一点 公共类MainActivity扩展了活动{ChartEngine android,每秒从左向右移动一张图表,android,charts,Android,Charts,我想用Android每秒从左向右移动一张图表: 例如,如果第一个值是坐标(0,5),则一秒钟后 从队列中获取一个新值,并在x轴上将其添加到0。 坐标(0,5)现在必须向右移动,以便变为(1,5) 每秒从队列中提取一个y值,因此折线图应每秒移动一次 使用ChartEngine框架执行此操作的最佳方法是什么? 我试着每秒重新绘制图表和它的所有值,但我想有一种更好、性能更友好的方法可以做到这一点 公共类MainActivity扩展了活动{ private GraphicalView mChart;
private GraphicalView mChart;
private XYSeries visitsSeries ;
private XYMultipleSeriesDataset dataset;
private XYSeriesRenderer visitsRenderer;
private XYMultipleSeriesRenderer multiRenderer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Setting up chart
setupChart();
// Start plotting chart
new ChartTask().execute();
}
private void setupChart(){
// Creating an XYSeries for Visits
visitsSeries = new XYSeries("Unique Visitors");
// Creating a dataset to hold each series
dataset = new XYMultipleSeriesDataset();
// Adding Visits Series to the dataset
dataset.addSeries(visitsSeries);
// Creating XYSeriesRenderer to customize visitsSeries
visitsRenderer = new XYSeriesRenderer();
visitsRenderer.setColor(Color.WHITE);
visitsRenderer.setPointStyle(PointStyle.CIRCLE);
visitsRenderer.setFillPoints(true);
visitsRenderer.setLineWidth(2);
visitsRenderer.setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setChartTitle("Visits Chart");
multiRenderer.setXTitle("Seconds");
multiRenderer.setYTitle("Count");
multiRenderer.setZoomButtonsVisible(true);
multiRenderer.setXAxisMin(0);
multiRenderer.setXAxisMax(10);
multiRenderer.setYAxisMin(0);
multiRenderer.setYAxisMax(10);
multiRenderer.setBarSpacing(2);
// Adding visitsRenderer to multipleRenderer
// Note: The order of adding dataseries to dataset and renderers to multipleRenderer
// should be same
multiRenderer.addSeriesRenderer(visitsRenderer);
// Getting a reference to LinearLayout of the MainActivity Layout
LinearLayout chartContainer = (LinearLayout) findViewById(R.id.chart_container);
mChart = (GraphicalView) ChartFactory.getLineChartView(getBaseContext(), dataset, multiRenderer);
// Adding the Line Chart to the LinearLayout
chartContainer.addView(mChart);
}
private class ChartTask extends AsyncTask<Void, String, Void>{
// Generates dummy data in a non-ui thread
@Override
protected Void doInBackground(Void... params)
{
int i = 0;
try{
do{
String [] values = new String[2];
Random r = new Random();
int visits = r.nextInt(10);
System.out.println(String.valueOf(visits));
values[0] = Integer.toString(i); // x-as denkek
values[1] = Integer.toString(visits); //bijhorende waarde y-as
publishProgress(values);
Thread.sleep(1000);
i++;
}while(i<=10);
}catch(Exception e){ }
return null;
}
// Plotting generated data in the graph
@Override
protected void onProgressUpdate(String... values)
{
visitsSeries.add(Integer.parseInt(values[0]), Integer.parseInt(values[1]));
mChart.repaint();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
private GraphicalView mChart;
私人XYSeries visitsSeries;
私有XYmultiplesseriesdataset数据集;
私有XYSeriesRenderer访问呈现程序;
私有XYMultipleSeriesRenderer多渲染器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置图表
setupChart();
//开始绘制图表
新建ChartTask().execute();
}
私有void setupChart(){
//为访问创建XYSeries
visitsSeries=新的XYSeries(“唯一访问者”);
//创建数据集以保存每个系列
数据集=新的XYMultipleSeriesDataset();
//将访问序列添加到数据集
dataset.addSeries(visitsSeries);
//创建XYSeriesRenderer以自定义visitsSeries
visitsRenderer=新的XYSeriesRenderer();
visitsRenderer.setColor(Color.WHITE);
visitsRenderer.setPointStyle(PointStyle.CIRCLE);
visitsRenderer.setFillPoints(真);
visitsRenderer.setLineWidth(2);
visitsRenderer.setDisplayChartValues(true);
//创建XYMultipleReseriesRenderer以自定义整个图表
multiRenderer=新的XYMultipleReseriesRenderer();
multiRenderer.setChartTitle(“访问图表”);
setXTitle(“秒”);
multiRenderer.setytle(“Count”);
multiRenderer.setZoomButtonsVisible(true);
多渲染器.setXAxisMin(0);
setXAxisMax(10);
多渲染器.setYAxisMin(0);
多渲染器setYAxisMax(10);
多渲染器。设置间隔(2);
//将visitsRenderer添加到multipleRenderer
//注意:将数据系列添加到dataset和将渲染器添加到multipleRenderer的顺序
//应该是一样的
multiRenderer.addSeriesRenderer(visitsRenderer);
//获取对MainActivity布局的LinearLayout的引用
LinearLayout chartContainer=(LinearLayout)findViewById(R.id.chart\u容器);
mChart=(GraphicalView)ChartFactory.getLineChartView(getBaseContext(),数据集,多渲染器);
//将折线图添加到LinearLayout
chartContainer.addView(mChart);
}
私有类ChartTask扩展了AsyncTask{
//在非ui线程中生成虚拟数据
@凌驾
受保护的Void doInBackground(Void…参数)
{
int i=0;
试一试{
做{
字符串[]值=新字符串[2];
随机r=新随机();
内部访问=r.nextInt(10);
System.out.println(String.valueOf(visions));
值[0]=Integer.toString(i);//x-as-denkek
值[1]=Integer.toString(访问);//bijhorende waarde y-as
出版进度(价值观);
睡眠(1000);
i++;
}而