Динамическая диаграмма Android - PullRequest
7 голосов
/ 16 января 2012

Привет, разработчики Android, В настоящее время я работаю над одним приложением для диаграмм на финансовой основе и рисую диаграмму с помощью блога jjoe64. но сейчас я собираюсь реализовать график в реальном времени. например, диаграмма автоматически рисуется на поверхности каждую секунду или минуту после внесения изменений на стороне сервера. может ли кто-нибудь реализовать такие задачи. пожалуйста, помогите мне в этом.

1 Ответ

11 голосов
/ 16 января 2012

Хорошо, я настоятельно рекомендую использовать AChartEngine. Он бесплатный, легкий и поддерживает многие типы круговых диаграмм, графиков и т. Д. Что касается динамического обновления диаграммы, я добился этого путем добавления значений в отдельном потоке. Вот мой пример, в этом нет ничего особенного:

package my.pack;

import java.util.Date;
import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

 public class ChartsActivity extends Activity {

private static Random random = new Random();

private static TimeSeries timeSeries;
private static XYMultipleSeriesDataset dataset;
private static XYMultipleSeriesRenderer renderer;
private static XYSeriesRenderer rendererSeries;
private static GraphicalView view;
private static Thread mThread;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     

    dataset = new XYMultipleSeriesDataset();

    renderer = new XYMultipleSeriesRenderer();
    renderer.setAxesColor(Color.BLUE);
    renderer.setAxisTitleTextSize(16);
    renderer.setChartTitle("Time");
    renderer.setChartTitleTextSize(15);
    renderer.setFitLegend(true);
    renderer.setGridColor(Color.LTGRAY);
    renderer.setPanEnabled(true, true);
    renderer.setPointSize(10);
    renderer.setXTitle("Time");
    renderer.setYTitle("Number");
    renderer.setMargins( new int []{20, 30, 15, 0});
    renderer.setZoomButtonsVisible(true);
    renderer.setBarSpacing(10);
    renderer.setShowGrid(true);


    rendererSeries = new XYSeriesRenderer();
    rendererSeries.setColor(Color.RED);
    renderer.addSeriesRenderer(rendererSeries);
    rendererSeries.setFillPoints(true);
    rendererSeries.setPointStyle(PointStyle.CIRCLE);

    timeSeries = new TimeSeries("Random");
    mThread = new Thread(){
        public void run(){
            while(true){
            try {
                Thread.sleep(2000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
                timeSeries.add(new Date(), random.nextInt(10));
                view.repaint();
            }
        }
    };
    mThread.start();
}

@Override
protected void onStart() {
    super.onStart();
    dataset.addSeries(timeSeries);
    view = ChartFactory.getTimeChartView(this, dataset, renderer, "Test");
    view.refreshDrawableState();
    view.repaint();
    setContentView(view);    
}

}

Добавьте свои собственные значения в поток. Возможно, вы захотите взглянуть на то, как использовать библиотеку AChartEngine. Удачного кодирования!

...