是否可以使用 achartengine 库来制作它,以便在绘制图形时它会慢慢地绘制。像每毫秒绘制一个点?不太确定要进行更改。
问问题
1973 次
1 回答
3
对的,这是可能的。
您可以制作一个 timertask 以间隔执行以下操作:
- 将 (x,y) 对添加到当前系列
- 重新绘制图表
这样,您可以“慢慢地”绘制图形。
这是我写的一个示例,它将每隔一段时间绘制 ay = x^2 图。不完全是你想做的,但原理是一样的,玩弄它,修改它以满足你的需要,如果你遇到任何问题,告诉我。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.plot);
// Buttons
mButtonStart = (Button) findViewById(R.id.button_plot_start);
mButtonStop = (Button) findViewById(R.id.button_plot_stop);
mButtonStart.setOnClickListener(this);
mButtonStop.setOnClickListener(this);
// Chart
mRenderer.setZoomButtonsVisible(true);
String seriesTitle = "SAMPLE"
XYSeries series = new XYSeries(seriesTitle);
mDataSet.addSeries(series);
mCurrentSeries = series;
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setPointStyle(PointStyle.SQUARE);
renderer.setFillPoints(true);
renderer.setDisplayChartValues(true);
renderer.setColor(Color.RED);
mRenderer.addSeriesRenderer(renderer);
mRenderer.setXLabels(0);
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onResume() {
super.onResume();
if (mChartView == null) {
// Enable click and pan
mRenderer.setClickEnabled(true);
mRenderer.setPanEnabled(true, true);
LinearLayout layout = (LinearLayout) findViewById(R.id.linearlayout_chart);
mChartView = ChartFactory.getLineChartView(this, mDataSet, mRenderer);
mRenderer.setClickEnabled(true);
mChartView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
}
});
mChartView.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
return false;
}
});
mChartView.addZoomListener(new ZoomListener() {
public void zoomApplied(ZoomEvent e) {
}
public void zoomReset() {
}
}, true, true);
mChartView.addPanListener(new PanListener() {
public void panApplied() {
}
});
layout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
} else {
mChartView.repaint();
}
}
@Override
protected void onDestroy() {
if (mTimerTask != null) {
mTimerTask.cancel();
}
if (mTimer != null) {
mTimer.cancel();
}
super.onDestroy();
}
protected void updateChart() {
mCurrentSeries.add(mX, mX*mX);
mX++;
// Update the chart by repaint()
if (mChartView != null) {
mChartView.repaint();
}
}
/**
* A TimerTask class
*
*/
private class MyTimerTask extends TimerTask {
@Override
public void run() {
updateChart();
}
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_plot_start:
// "Start" button clicked
// Cancel current timer and timer task if existed
if (mTimerTask != null ) {
mTimerTask.cancel();
}
if (mTimer != null) {
mTimer.cancel();
}
mTimer = new Timer();
mX = 0;
// Clear current X-axis
mCurrentSeries.clear();
mRenderer.clearXTextLabels();
mTimerTask = new MyTimerTask();
// Delay 100(0.1s), interval is 3000 (3s)
mTimer.schedule(mTimerTask, 100, 3000);
break;
case R.id.button_plot_stop:
// "Stop" button clicked
// Cancel current timer and timer task
if (mTimerTask != null) {
mTimerTask.cancel();
}
if (mTimer != null) {
mTimer.cancel();
}
break;
}
}
于 2012-01-24T22:56:22.783 回答