0

我在创建应用程序时开始的布局中加载了一个图表(achartengine 的 2 轴图表)

createData(); // is public void, creates data array for maChartView
setGraph();  // is public void, set tittles and font sizes, range of interests
mylayout = (LinearLayout) findViewById(R.id.chart);     
mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);

我有一个按钮,当按下时,最初显示的图表必须更改以显示另一组数据,标题和 roi(表示感兴趣的范围,x 轴和 y 轴的值区间)

public void reDraw(View view){
    createData2();
    setGraph2();
    mChartView.repaint(); //mChartView is public instance of GraphicalView
}

方法中涉及的所有实例和变量createData()都是setGraph()公共的。应用程序在模拟器中启动正常,第一张图显示良好,但是当我按下按钮时,什么也没有发生:(,我不知道为什么。

谁能给我一个见解?谢谢。

添加更多细节并修改 createData2,现在它只是重新计算 y 值。用户可以为二级多项式输入三个参数,根据这些值,相应的图形会发生变化。用户输入参数后,按下按钮触发此

    public void reDraw(View view){

    List<double[]> values = new ArrayList<double[]>();
    //createData2() returns a new set of y-values depending on the user inputs
    values = createData2();
    setGraph2();
    XYMultipleSeriesDataset mDataset = buildDataset(titles, x, values);
    GraphicalView mChartView;
    mylayout = (LinearLayout) findViewById(R.id.chart);
    mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);
    LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);        
    mylayout.addView(mChartView, params);
    mChartView.repaint();
    }    

当我测试代码时,它在我第一次输入参数时运行正常,但是当我输入第二组参数时没有任何反应。如果我旋转模拟器并按下绘图按钮,新的图形就会出现!但这不是想法,想法是在按下按钮后重新绘制新图形。

4

2 回答 2

0

当您按下按钮时,听起来您正在完全创建一个新图表。但是,您应该只修改现有图表的系列,然后调用repaint.

于 2013-06-04T08:50:21.260 回答
0

我想我解决了。我没有向系列中添加新数据,我需要重新计算 de y 值(未触及相同的 x-vales 数组)。重绘方法没有效果。我只是重新创建了图表,但这条线是我的方法 reDraw(view view) 的基础

    mylayout.removeAllViewsInLayout();

删除以前的平局并设置新的平局。现在效果很好:)

于 2013-06-11T04:33:29.980 回答