как сделать график в ахартенжине медленно

1

Можно ли использовать библиотеку achartengine, чтобы сделать так, чтобы при построении графика он делал это медленно. как сюжет точки каждые миллисекунды? Не совсем уверен, чтобы это изменить.

Теги:
graph
achartengine

1 ответ

3

Да, это возможно.

Вы можете сделать timertask, чтобы делать вещи ниже с интервалами:

  1. добавьте пару (x, y) в текущую серию
  2. перерисовать график

Таким образом, вы можете построить график "медленно".

Вот образец, написанный мною, который будет рисовать график 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;
    }

}
  • 0
    Эй, @Wenshan, спасибо за пример. Подскажите, пожалуйста, как это сделать для гистограммы в AChartEngine.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню