我正在使用achartengine来显示LineChartView。有时需要重新绘制图形,我希望新的grah显示在整个屏幕上。只要图表没有缩放或移动,就不会有问题。只需单击一次也不是问题。
如果图表被缩放或移动,则新图表无法正确显示。新图表显示错误,但与之前不同。
我写了一个例子来证明这个问题:
openChart()初始化图形,在setOnClick()方法中添加onClickListener,并在change()方法中切换两个图形。我从菜单项中调用change()方法,但这没关系。
public class MainActivity extends Activity {
private GraphicalView graphViewe;
private XYSeries series;
private XYSeriesRenderer seriesRenderer;
private XYMultipleSeriesRenderer multiRenderer;
private int[] firstGraph = new int[] { -10, -9, -8, -7, -6, -5, -4, -3, -2,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private int[] secondGraph = new int[] { 0, 0, 0, 0, 0, 0 };
private boolean isFirst = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
openChart();
}
private void openChart() {
series = new XYSeries("Series");
for (int i = 0; i < firstGraph.length; i++) {
series.add(i, firstGraph[i]);
}
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(series);
seriesRenderer = new XYSeriesRenderer();
seriesRenderer.setLineWidth(10);
multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.addSeriesRenderer(seriesRenderer);
multiRenderer.setZoomButtonsVisible(true);
multiRenderer.setClickEnabled(true);
multiRenderer.setSelectableBuffer(10);
LinearLayout chartContainer = (LinearLayout) findViewById(R.id.chart_container);
graphViewe = ChartFactory.getLineChartView(getBaseContext(), dataset,
multiRenderer);
setOnClick();
chartContainer.addView(graphViewe);
}
private void setOnClick() {
graphViewe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do something on click
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.action_change) {
change();
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
private void change() {
series.clear();
if (isFirst) {
isFirst = false;
for (int i = 0; i < secondGraph.length; i++) {
series.add(i, secondGraph[i]);
}
} else {
isFirst = true;
for (int i = 0; i < firstGraph.length; i++) {
series.add(i, firstGraph[i]);
}
}
graphViewe.repaint();
}
}
是否可以以相同的方式显示图表?无论他被移动还是放大。