ChartEngine android,每秒从左向右移动一张图表

ChartEngine android,每秒从左向右移动一张图表,android,charts,Android,Charts,我想用Android每秒从左向右移动一张图表: 例如,如果第一个值是坐标(0,5),则一秒钟后 从队列中获取一个新值,并在x轴上将其添加到0。 坐标(0,5)现在必须向右移动,以便变为(1,5) 每秒从队列中提取一个y值,因此折线图应每秒移动一次 使用ChartEngine框架执行此操作的最佳方法是什么? 我试着每秒重新绘制图表和它的所有值,但我想有一种更好、性能更友好的方法可以做到这一点 公共类MainActivity扩展了活动{ private GraphicalView mChart;

我想用Android每秒从左向右移动一张图表:

例如,如果第一个值是坐标(0,5),则一秒钟后 从队列中获取一个新值,并在x轴上将其添加到0。 坐标(0,5)现在必须向右移动,以便变为(1,5)

每秒从队列中提取一个y值,因此折线图应每秒移动一次

使用ChartEngine框架执行此操作的最佳方法是什么? 我试着每秒重新绘制图表和它的所有值,但我想有一种更好、性能更友好的方法可以做到这一点

公共类MainActivity扩展了活动{

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++;
}而