2013-04-01 17 views
9

Ich habe ein Balkendiagramm mit AChartEngine Bibliothek wie folgt ::Balkendiagramm mit AChartEngine Bibliothek

public class MainActivity extends Activity { 

    private String[] mMonth = new String[] { 
      "Jan", "Feb" , "Mar", "Apr", "May", "Jun", 
      "Jul", "Aug" , "Sep", "Oct", "Nov", "Dec" 
     }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Getting reference to the button btn_chart 
    Button btnChart = (Button) findViewById(R.id.btn_chart); 

    // Defining click event listener for the button btn_chart 
    OnClickListener clickListener = new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // Draw the Income vs Expense Chart 
      openChart();     
     } 
    }; 

    // Setting event click listener for the button btn_chart of the MainActivity layout 
    btnChart.setOnClickListener(clickListener); 

} 

private void openChart(){ 
    int[] x = { 0,1,2,3,4,5,6,7 }; 
    int[] income = { 2000,2500,2700,3000,2800,3500,3700,3800}; 
    int[] expense = {2200, 2700, 2900, 2800, 2600, 3000, 3300, 3400 }; 

    // Creating an XYSeries for Income 
    //CategorySeries incomeSeries = new CategorySeries("Income"); 
    XYSeries incomeSeries = new XYSeries("Income"); 
    // Creating an XYSeries for Income 
    XYSeries expenseSeries = new XYSeries("Expense"); 
    // Adding data to Income and Expense Series 
    for(int i=0;i<x.length;i++){    
     incomeSeries.add(i,income[i]); 
     expenseSeries.add(i,expense[i]); 
    } 


    // Creating a dataset to hold each series 
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
    // Adding Income Series to the dataset 
    dataset.addSeries(incomeSeries); 
    // Adding Expense Series to dataset 
    dataset.addSeries(expenseSeries);  

    // Creating XYSeriesRenderer to customize incomeSeries 
    XYSeriesRenderer incomeRenderer = new XYSeriesRenderer(); 
    incomeRenderer.setColor(Color.rgb(130, 130, 230)); 
    incomeRenderer.setFillPoints(true); 
    incomeRenderer.setLineWidth(2); 
    incomeRenderer.setDisplayChartValues(true); 

    // Creating XYSeriesRenderer to customize expenseSeries 
    XYSeriesRenderer expenseRenderer = new XYSeriesRenderer(); 
    expenseRenderer.setColor(Color.rgb(220, 80, 80)); 
    expenseRenderer.setFillPoints(true); 
    expenseRenderer.setLineWidth(2); 
    expenseRenderer.setDisplayChartValues(true);   
    Calendar cal = Calendar.getInstance(); 
    cal.clear(Calendar.HOUR); 
    // Creating a XYMultipleSeriesRenderer to customize the whole chart 
    XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer(); 
    multiRenderer.setXLabels(0); 
    multiRenderer.setChartTitle("Income vs Expense Chart"); 
    multiRenderer.setXTitle("Year 2012"); 
    multiRenderer.setYTitle("Amount in Dollars"); 
    multiRenderer.setZoomButtonsVisible(true);    
    for(int i=0; i< x.length;i++){ 
     multiRenderer.addXTextLabel(i, mMonth[i]);   
    }  

    // Adding incomeRenderer and expenseRenderer to multipleRenderer 
    // Note: The order of adding dataseries to dataset and renderers to multipleRenderer 
    // should be same 
    multiRenderer.addSeriesRenderer(incomeRenderer); 
    multiRenderer.addSeriesRenderer(expenseRenderer); 

    // Creating an intent to plot bar chart using dataset and multipleRenderer  
    Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, multiRenderer, Type.DEFAULT); 

    // Start Activity 
    startActivity(intent); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 
} 

Above Codediagramm wie folgt aussieht:

pic http://i49.tinypic.com/2j5xhrs.png

Aber ich eine Grafik zeichnen müssen mit folgender Eigenschaft:

  1. Die X-Achse muss die aktuelle Uhrzeit anzeigen. Siehe unten Graph Zeit einig wo> 02.00
  2. Jeder Balken in der X-Achse in 5 Minuten bar
  3. für alle 5 Minuten i ein Daten senden soll es eine Leiste auf Wert basierend ziehen.
  4. für ignorieren jetzt Y-Achse Parameter müssen nur, wie erforderlich ist, um Plot X-aixs

Der Graph einige, was wie folgt aussieht:

pic http://i46.tinypic.com/13ypbw7.png

Antwort

4

können Sie Unix-Zeitstempel halten auf dem X Achse und steuern Sie die Etiketten selbst.

renderer.addXTextLabel(x, "label"); 

Ein Unix-Zeitstempel ist der Wert, der getTime() auf ein Date-Objekt zurückkehrt: Sie können benutzerdefinierte X-Achse Etiketten mit hinzufügen. So können Sie diese Werte auf Ihre Serie eintragen:

series.add(date.getTime(), value); 

Dann können Sie benutzerdefinierte Etiketten für einige Werte hinzufügen:

SimpleDateFormat format = new SimpleDateFormat("h a"); 
renderer.addXTextLabel(date.getTime(), format.format(date.getTime())); 
+0

bitte können Sie mir erklären, mit einem Beispiel sir..Regarding Unix Zeitstempel auf x-Achse .. – Kiran

+0

Bitte sehen Sie meine bearbeitete Antwort. –

+0

ya danke werde es versuchen – Kiran

5

ich habe so etwas wie dieses :: für statische Daten

public class MainActivity extends Activity { 
final Calendar c = Calendar.getInstance(); 
     int mMinute = c.get(Calendar.MINUTE); 
     int mHour = c.get(Calendar.HOUR_OF_DAY); 
     int am =c.get(Calendar.AM_PM); 
     int[] x =new int[1920]; 
     int[] sleep = {4,3,2,1,4,3,2,1,4,3,2,1,4,1,1,1,4,4,2,2,2,3,3,2,2,2,2,2,1,1,1,1,1,1,4,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2};  
    public String getnext(int a) 
    { 
     String ap; 
     if(am==1){ap="PM";} 
     else{ap="AM";} 
    String s= mHour+" "+ap; 
    mMinute=mMinute+5; 

    if (mHour >=12){ 
     mHour=mHour-12; 
     switch(am){case 0:am=1; break; case 1:am=0;break;} 
    } 
     if(mMinute >= 60) 
     { 
      mHour= mHour+1; 
      mMinute=mMinute-60; 
     } 
     //Log.d("Gr","mMinute: "+mMinute); 
     if(mMinute==1 | mMinute==2 | mMinute==3 |mMinute==4 | mMinute==0) 
     {s= mHour+" "+ap;} 
     else{s="";} 

     return (s);} 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // setContentView(R.layout.activity_main); 

    openChart(); 
    } 


private void openChart(){ 
    XYSeries sleepSeries = new XYSeries("Sleep"); 

    for(int i=0;i<sleep.length;i++){ 
     sleepSeries.add(i,sleep[i]); 
    } 


    // Creating a dataset to hold each series 
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
    // Adding Income Series to the dataset 
    dataset.addSeries(sleepSeries);  


    // Creating XYSeriesRenderer to customize incomeSeries 
    XYSeriesRenderer sleepRenderer = new XYSeriesRenderer(); 
    sleepRenderer.setColor(Color.GREEN); 
    sleepRenderer.setFillPoints(true); 

    sleepRenderer.setLineWidth((float) .2); 

    // Creating a XYMultipleSeriesRenderer to customize the whole chart 
    XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer(); 
    multiRenderer.setXLabels(0); 
    multiRenderer.setYAxisMin(0); 
    multiRenderer.setYLabels(0); 
    multiRenderer.setYAxisMax(4); 
    multiRenderer.setChartTitle("Sleep vs Time"); 
    multiRenderer.setBarSpacing(.5); 
    //multiRenderer.setZoomButtonsVisible(true); 
    multiRenderer.setLegendHeight((int) 5); 
    multiRenderer.setPanEnabled(true, false); 

    multiRenderer.addSeriesRenderer(sleepRenderer); 

    // Creating an intent to plot bar chart using dataset and multipleRenderer  
    Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, renderer, Type.DEFAULT); 

    // Start Activity 
    startActivity(intent); 

} 

ich habe graph wie

df http://i50.tinypic.com/jqtlpl.png

UPDATE :::

für Echtzeitdaten, aktualisieren Serien wie

static ArrayList<Integer> sleep = new ArrayList<Integer>(); 

wie und wann newval verfügbar ist

sleep.add(newval); 

dann openChart(); in dieser ersten klaren Dataset nennen (dataset.clear();) dann Anruf repaint();

0

Ich denke für Ihre Anforderung, Erstellen von benutzerdefinierten Balkendiagrammen wird einfach.Hier ist das Beispiel, Sie können mit diesem Beispiel zu entwickeln, indem Sie einfach 5 Arrays, die Sie in Diagramm zeigen möchten.

Bar Chart in Android With out any Built in jars

Just, gehen gründliche das Beispiel und überprüfen.

Der Hauptvorteil besteht darin, dass Sie zum Zeichnen von Diagrammen keine vordefinierten Bibliotheken verwenden müssen. es wird möglich sein mit einfachen android UI wie TextView and ListView