2012-10-28 33 views
2

我的目标是创建一个图形,根据用户操作隐藏和显示一系列图形。我想通过首先清除图表和数据集和渲染器,然后重新插入新值来实现这一点。就像Arraylists的.clear()方法一样,我想知道是否为XYMultipleSeriesRenderer构建了一些类似的功能。我注意到,XYMultipleSeriesDataset是缺乏类似的功能,但我可以做XYMultipleSeriesRenderer中的achartengine清晰渲染器

 for(int i = 0; i < dataset.getSeriesCount(); i++) { 
      dataset.removeSeries(i); 
     } 

幸运的是XYMultipleSeriesRenderer似乎有方法的getrenderercount类型,以解决(我想,我不能肯定还没有),但不是一个需要ints的移除方法。我所看到的只是一个删除功能,不需要ints,只是实际的系列渲染器名称。

这里是更多的代码是否有帮助:

private void excecuteGraph() { 
    //  add series to the complete dataset 
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
    XYMultipleSeriesRenderer mrenderer = new XYMultipleSeriesRenderer(); 

    switch (graphCase){ 
    case -1: 
     dataset.addSeries(series0); 
     dataset.addSeries(series1); 
     dataset.addSeries(series2); 
     dataset.addSeries(series3);  

     //   create the individual renderers, customize settings for each 
     XYSeriesRenderer renderer1 = new XYSeriesRenderer(); 
     renderer1.setColor(Color.BLUE); 
     renderer1.setLineWidth(3); 
     XYSeriesRenderer renderer2 = new XYSeriesRenderer(); 
     renderer2.setColor(Color.DKGRAY); 
     renderer2.setLineWidth(3); 
     XYSeriesRenderer renderer3 = new XYSeriesRenderer(); 
     renderer3.setColor(Color.RED);  
     renderer3.setLineWidth(3); 
     XYSeriesRenderer renderer4 = new XYSeriesRenderer(); 
     renderer4.setColor(Color.WHITE);   
     renderer4.setLineWidth(3); 

     //   add renderers to the complete multirenderer, customize settings for it 
     mrenderer.addSeriesRenderer(renderer1); 
     mrenderer.addSeriesRenderer(renderer2); 
     mrenderer.addSeriesRenderer(renderer3); 
     mrenderer.addSeriesRenderer(renderer4); 
     break; 
    case 0: 
     for(int i = 0; i < dataset.getSeriesCount(); i++) { 
      dataset.removeSeries(i); 
     } 

     dataset.addSeries(series0); 
     XYSeriesRenderer renderer00 = new XYSeriesRenderer(); 
     renderer00.setColor(Color.BLUE); 
     renderer00.setLineWidth(3); 
     mrenderer.addSeriesRenderer(renderer00); 
     break; 
    case 1: 
     for(int i = 0; i < dataset.getSeriesCount(); i++) { 
      dataset.removeSeries(i); 
      Log.d("testingGraph", dataset.toString()); 
     } 

     dataset.addSeries(series1); 
     XYSeriesRenderer renderer10 = new XYSeriesRenderer(); 
     renderer10.setColor(Color.DKGRAY); 
     renderer10.setLineWidth(3); 
     mrenderer.addSeriesRenderer(renderer10); 
     break; 
    case 2: 
     for(int i = 0; i < dataset.getSeriesCount(); i++) { 
      dataset.removeSeries(i); 
     } 
     dataset.addSeries(series2); 
     XYSeriesRenderer renderer20 = new XYSeriesRenderer(); 
     renderer20.setColor(Color.RED);  
     renderer20.setLineWidth(3); 
     mrenderer.addSeriesRenderer(renderer20); 
    case 3: 
     for(int i = 0; i < dataset.getSeriesCount(); i++) { 
      dataset.removeSeries(i); 
     } 
     dataset.addSeries(series3); 
     XYSeriesRenderer renderer30 = new XYSeriesRenderer(); 
     renderer30.setColor(Color.WHITE);  
     renderer30.setLineWidth(3); 
     mrenderer.addSeriesRenderer(renderer30); 
    } 

    mrenderer.setYTitle("Accuracy (%)"); 
    mrenderer.setYAxisMin(0); 
    mrenderer.setYAxisMax(100); 
    mrenderer.setApplyBackgroundColor(true); 
    mrenderer.setBackgroundColor(Color.TRANSPARENT); 

    //  Get the chart view result, add it to the linear layout 
    GraphicalView mChartView = ChartFactory.getTimeChartView(this, dataset, 
      mrenderer, "MM/dd/yyyy"); 

    LinearLayout graphLayout = (LinearLayout) findViewById(R.id.layout_graph); 
    graphLayout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, 
      LayoutParams.MATCH_PARENT));   

    if (mChartView !=null) { 
     mChartView.repaint(); 
    } 

} 

回答

5

不知道我理解你的问题完全是,但我可以给你一些线索。

要删除所有渲染在XYMultipleSeriesRenderer

renderer.removeAllRenderers(); 

要删除所有系列中的XYMultipleSeriesDataset

int size = dataset.getSeriesCount(); 
for (int i = 0; i < size; i++) { 
    // always remove the first element because once you remove one element, 
    // the size of the list becomes size - 1 and so on 
    dataset.removeSeries(0); 
} 

但是,如果你想隐藏一个单系列,则只需删除一个而不是全部。

+0

也许我有一个过时的jar或什么的,我找不到'mrenderer.removeAllRenderers();'离我最近的是'mrenderer.removeSeriesRenderer(renderer)'。这要求我一次只做一个,这对我来说没有用处,因为这些在运行时会有所不同。如果这有所作为,我正在做一个时间系列。 – mango

+0

从这里下载1.0.0:http://code.google.com/p/achartengine/downloads/list或1.1.0-rc1从这里:http://www.achartengine.org/download/ –

+0

以及我有1.0 .0已经。我会测试rc1。你认为最好是扩展课程并尝试我自己的系列可见性切换器吗?我对自己的能力没有那么自信,但如果可能的话,我很乐意尝试。 – mango