2012-01-16 12 views
7

Hola desarrolladores de Android, Actualmente estoy trabajando en una aplicación de gráficos basados ​​en finanzas, y dibujo el gráfico con la ayuda del blog jjoe64. pero ahora voy a implementar un gráfico en tiempo real. por ejemplo, el gráfico se dibuja automáticamente en la superficie cada segundo o un minuto una vez realizados los cambios en el lado del servidor. ¿alguien puede implementar este tipo de tarea? por favor ayúdame con respecto a esto.Android Dynamic Chart

Respuesta

11

Ok, recomiendo usar AChartEngine. Es libre, ligero y soporta varios tipos de gráficos circulares, gráfico, etc. Como punto de actualizar dinámicamente el gráfico i logrado mediante la adición de valores en un thread.Here separada es mi ejemplo, no es muy sofisticado:

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);  
} 

} 

Agregue sus propios valores a la secuencia. Puede ver cómo usar la biblioteca AChartEngine. Happy coding!

+1

Soy un principiante de Android, y trato de hacer una aplicación de gráfico dinámico. En su ejemplo, ¿cómo integro su código con ChartDemo.java – Pankaj

+1

Sea más específico de lo que usted está diciendo que decir. Ahora me cambié a Java EE, así que sea más específico .... – Carolik

+2

También hay un gran tutorial sobre el mismo tema aquí (especialmente útil al reutilizar los archivos de demostración): http://www.youtube.com/watch?v=E9fozQ5NlSo&feature=share&list=PL2603F3CABBF5EEB0 – hornetbzz