Да, это возможно.
Вы можете сделать таймерную задачу, чтобы делать вещи ниже с интервалами:
- добавить пару (x, y) к текущей серии
- перекрасить график
Таким образом, вы можете построить график «медленно».
Вот пример, написанный мной, который будет рисовать график y = 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;
}
}