我在创建应用时启动的布局中加载了图表(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);
我有一个按钮,当按下时,最初显示的图形必须改变以显示另一组数据,tittle和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();
}
当我测试代码时,它在第一次输入参数时运行正常,但是当我输入第二组参数时没有任何反应。如果我旋转模拟器并按下绘图按钮,则会显示新图形!但这不是主意,我们的想法是在按下按钮后重新绘制新图形。
答案 0 :(得分:0)
当您按下按钮时,听起来您正在完全创建新图表。但是,您应该只修改现有图表的系列,然后调用repaint
。
答案 1 :(得分:0)
我想我解决了。 我没有在系列中添加新数据,我需要重新计算de y值(不会触及相同的x-vales数组)。重绘方法无效。我只是重新创建了图表,但这条线在我的方法reDraw(视图视图)
中是基础 mylayout.removeAllViewsInLayout();
删除上一个绘图并设置新绘图。现在它很好用:))