首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Achartengine实现android动态绘图

使用Achartengine实现android动态绘图
EN

Stack Overflow用户
提问于 2012-07-03 13:02:04
回答 1查看 2.6K关注 0票数 0

我是android的新手。我正在使用Achartengine绘制一个从二进制文件中读取值的动态图形。下面是我的代码,我想有一个动态的运行图,其中的值是定期更新的。为此,我尝试使用计时器和不使用计时器。但每次当最后的值被更新时,我都会得到带有最终值的图形。我的意思是,在所有的更新都完成之后,我会得到一个静态的图形。我想不出该怎么纠正这个问题。我正在使用模拟器来测试代码。会不会是模拟器有问题,或者我的代码有问题?提前感谢

不带计时器的代码:

代码语言:javascript
复制
public class RandomActivity extends Activity {
private XYMultipleSeriesDataset eeg1 = new XYMultipleSeriesDataset();
private XYMultipleSeriesRenderer renderer_eeg1 = new XYMultipleSeriesRenderer();
private XYSeries series1;
private GraphicalView view_eeg1;


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

renderer_eeg1.setAxisTitleTextSize(16);
renderer_eeg1.setChartTitleTextSize(20);
renderer_eeg1.setLabelsTextSize(15);
renderer_eeg1.setLegendTextSize(15);
renderer_eeg1.setMargins(new int[] {20, 30, 15, 0});
renderer_eeg1.setAxesColor(Color.BLUE);
renderer_eeg1.setXTitle("Time");
renderer_eeg1.setChartTitle("eeg1");
XYSeriesRenderer seriesrenderer1 = new XYSeriesRenderer();
seriesrenderer1.setColor(Color.YELLOW);
renderer_eeg1.addSeriesRenderer(seriesrenderer1); 
series1= new XYSeries("eeg1");
eeg1.addSeries(series1);
int a;
int b;
add();

for(int r=0;r<=600;r++){

   if(r%2==0){
      a=1;
      b=-1;
   }
   else{
      a=-1;
      b=1;
   }

   series1.add(r, a);
       if(r<=50){
      renderer_eeg1.setXAxisMax(50);
       }
       else if(r>50){
          double maxX = series1.getMaxX();
      double minX = maxX - 50;
          renderer_eeg1.setXAxisMin(minX);
       }
       view_eeg1.repaint();
}
}


protected void onResume() {
super.onResume();  
if (view_eeg1== null) {
LinearLayout layout_eeg1 = (LinearLayout) findViewById(R.id.chart1);
view_eeg1= ChartFactory.getLineChartView(this, eeg1, renderer_eeg1);
layout_eeg1.addView(view_eeg1,new LayoutParams(LayoutParams.FILL_PARENT,  LayoutParams.FILL_PARENT));
} else {
 view_eeg1.repaint();}
}

}

使用计时器的代码:

代码语言:javascript
复制
public class RandomActivity extends Activity {
private XYMultipleSeriesDataset eeg1 = new XYMultipleSeriesDataset();
private XYMultipleSeriesRenderer renderer_eeg1 = new XYMultipleSeriesRenderer();
private XYSeries series1;
private GraphicalView view_eeg1;


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

renderer_eeg1.setAxisTitleTextSize(16);
renderer_eeg1.setChartTitleTextSize(20);
renderer_eeg1.setLabelsTextSize(15);
renderer_eeg1.setLegendTextSize(15);
renderer_eeg1.setMargins(new int[] {20, 30, 15, 0});
renderer_eeg1.setAxesColor(Color.BLUE);
renderer_eeg1.setXTitle("Time");
renderer_eeg1.setChartTitle("eeg1");
XYSeriesRenderer seriesrenderer1 = new XYSeriesRenderer();
seriesrenderer1.setColor(Color.YELLOW);
renderer_eeg1.addSeriesRenderer(seriesrenderer1); 
series1= new XYSeries("eeg1");
eeg1.addSeries(series1);
int a;
int b;
add();

for(int r=0;r<=600;r++){

      Thread timer = new Thread(){
            public void run(){
                try{
                    sleep(500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
            }
        };


   if(r%2==0){
      a=1;
      b=-1;
   }
   else{
      a=-1;
      b=1;
   }

   series1.add(r, a);
       if(r<=50){
      renderer_eeg1.setXAxisMax(50);
       }
       else if(r>50){
          double maxX = series1.getMaxX();
      double minX = maxX - 50;
          renderer_eeg1.setXAxisMin(minX);
       }
       view_eeg1.repaint();
}
}


protected void onResume() {
super.onResume();  
if (view_eeg1== null) {
LinearLayout layout_eeg1 = (LinearLayout) findViewById(R.id.chart1);
view_eeg1= ChartFactory.getLineChartView(this, eeg1, renderer_eeg1);
layout_eeg1.addView(view_eeg1,new LayoutParams(LayoutParams.FILL_PARENT,  LayoutParams.FILL_PARENT));
} else {
 view_eeg1.repaint();}
}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-12 01:11:45

  1. 在图表实际添加到视图之前重新绘制,这样它就不会被绘制。
  2. 您的代码不在正在创建的线程中。
  3. 您正在创建600个线程,但没有运行任何线程。
  4. 您的onResume代码看起来像是您认为onResume被多次调用(通常是Add)没有任何Add()函数,您是否有一个Add()函数?

< code >G211

我认为这会更好地工作:

代码语言:javascript
复制
public class RandomActivity extends Activity {
private XYMultipleSeriesDataset eeg1 = new XYMultipleSeriesDataset();
private XYMultipleSeriesRenderer renderer_eeg1 = new XYMultipleSeriesRenderer();
private XYSeries series1;
private GraphicalView view_eeg1;

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    renderer_eeg1.setAxisTitleTextSize(16);
    renderer_eeg1.setChartTitleTextSize(20);
    renderer_eeg1.setLabelsTextSize(15);
    renderer_eeg1.setLegendTextSize(15);
    renderer_eeg1.setMargins(new int[] {20, 30, 15, 0});
    renderer_eeg1.setAxesColor(Color.BLUE);
    renderer_eeg1.setXTitle("Time");
    renderer_eeg1.setChartTitle("eeg1");
    XYSeriesRenderer seriesrenderer1 = new XYSeriesRenderer();
    seriesrenderer1.setColor(Color.YELLOW);
    renderer_eeg1.addSeriesRenderer(seriesrenderer1); 
    series1= new XYSeries("eeg1");
    eeg1.addSeries(series1);
    int a;
    Thread timer = new Thread(){
        public void run(){
            try{
                for(int r=0;r<=600;r++){
                    sleep(500);
                    if(r%2==0){
                        a=1;
                    }
                    else{
                        a=-1;
                    }
                    series1.add(r, a);
                    if(r<=50){
                        renderer_eeg1.setXAxisMax(50);
                    }
                    else if(r>50){
                        double maxX = series1.getMaxX();
                        double minX = maxX - 50;
                        renderer_eeg1.setXAxisMin(minX);
                    }
                    view_eeg1.repaint();

                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
            }
        };
    timer.start()
    }

    protected void onResume() {
        super.onResume();  
            if (view_eeg1== null) {
                LinearLayout layout_eeg1 = (LinearLayout) findViewById(R.id.chart1);
                view_eeg1= ChartFactory.getLineChartView(this, eeg1, renderer_eeg1);
                layout_eeg1.addView(view_eeg1,new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
                } else {
                view_eeg1.repaint();}
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11304749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档