achartengine 曲线动态左移

来源:互联网 发布:在淘宝产品搜索量最高 编辑:程序博客网 时间:2024/05/22 02:17
修改自http://blog.csdn.net/chenpig/article/details/7352611
private void updateChart() {  
        
        //设置好下一个需要增加的节点  
        addX = 0;  
        addY = (int)(Math.random() * 90);  
          
        //移除数据集中旧的点集  
        mDataset.removeSeries(series);  
          
      //判断当前点集中到底有多少点,因为屏幕总共只能容纳100个,所以当点数超过100时,长度永远是100  
        int length = series.getItemCount();  
        if (length > 100) {  
            length = 100;  
        }  
        gCount++;
        if (gCount < 100)
        {//100个点以内的,直接添加进去就行
            series.add(length+1, addY);
            Log.e("ddd", "gCount:"+gCount+" series.getItemCount:"+series.getItemCount());
        }
        else
        {   //超过100,要去除第一个点,整体左移一个,在100点处添加新的点
            //将旧的点集中x和y的数值取出来放入backup中,并且将x的值减1,造成曲线向左平移的效果  
            for (int i = 0; i < length-1; i++) {  
                xv[i] = ((int) series.getX(i+1))-1;  
                yv[i] = (int) series.getY(i+1);  
            }  
              
            //点集先清空,为了做成新的点集而准备  
            series.clear();  
              
            //将新产生的点首先加入到点集中,然后在循环体中将坐标变换后的一系列点都重新加入到点集中  
            //这里可以试验一下把顺序颠倒过来是什么效果,即先运行循环体,再添加新产生的点  
              
            for (int k = 0; k < length-1; k++) {  
                series.add(xv[k], yv[k]);  
            }  
            series.add(100, addY);//在100点处添加新的点
        }
        
        
        //在数据集中添加新的点集  
        mDataset.addSeries(series);  
          
        //视图更新,没有这一步,曲线不会呈现动态  
        //如果在非UI主线程中,需要调用postInvalidate(),具体参考api  
        chart.invalidate();  
    }
0 0
原创粉丝点击