【问题标题】:achartengine clear renderers in XYMultipleSeriesRendererXYMultipleSeriesRenderer 中的 achartengine 清除渲染器
【发布时间】:2012-10-28 13:26:18
【问题描述】:

我的目标是创建一个图表,该图表将根据用户操作隐藏和显示一系列。我想通过首先清除图形和数据集以及渲染器然后重新插入新值来做到这一点。很像 Arraylists 的.clear() 方法,我想知道是否为 XYMultipleSeriesRenderer 构建了某种类似的功能。我注意到 XYMultipleSeriesDataset 缺乏类似的功能,但我能够通过这样做来解决这个问题(我想,我还不能确定)

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

幸运的是,XYMultipleSeriesRenderer 似乎有一个 getrenderercount 类型的方法,但没有一个采用 ints 的 remove 方法。我所看到的只是一个不需要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();
    }

}

【问题讨论】:

    标签: android dataset time-series achartengine renderer


    【解决方案1】:

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

    删除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);
    }
    

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

    【讨论】:

    • 也许我有一个过时的 jar 或其他东西,我找不到最接近的 mrenderer.removeAllRenderers();mrenderer.removeSeriesRenderer(renderer)。这要求我一次做一个,这对我没有用,因为这些在运行时会有所不同。如果有影响,我正在做一个时间序列。
    • 在此处下载 1.0.0:code.google.com/p/achartengine/downloads/list 或从此处下载 1.1.0-rc1:achartengine.org/download
    • 我已经有了 1.0.0。我将测试 rc1。您认为最好扩展课程并尝试我自己的系列可见性切换器吗?我对自己的能力没有那么自信,但如果可能的话我很想尝试。
    • 1.1.0 有 removeAllRenderers() 方法。
    • 好吧,我不知道为什么repaint(); 什么都不做,但我终于验证了您的解决方案绝对有效!您应该编辑您的答案,以便人们知道。丹这个人,我的英雄。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多