使用AChartEngine库的条形图

我有一个使用AChartEngine库的条形图,如下所示:

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

以上代码图如下所示:

图片http://img.androidcookie.com/android/2j5xhrs.png

但是我需要绘制具有以下属性的graphics:

  1. X轴将不得不显示当前的时间,如下图所示,时间是凌晨2点左右
  2. 在X轴的每个酒吧是5分钟酒吧
  3. 我每5分钟发一个数据就应该根据数值绘制一个数据条。
  4. 现在忽略Y轴参数只需要如何绘制需要的X-aixs

graphics有些像这样:

图片http://img.androidcookie.com/android/13ypbw7.png

Solutions Collecting From Web of "使用AChartEngine库的条形图"

我做了这样的::静态数据

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

我像图一样

df http://img.androidcookie.com/android/jqtlpl.png

UPDATE :::

为实时数据,更新系列如

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

当newval可用时

  sleep.add(newval); 

然后调用openChart(); 在第一个清除数据集( dataset.clear(); )然后调用repaint();

您可以在X轴上保留Unix时间戳并自己控制标签。 您可以使用以下方法添加自定义X轴标签

 renderer.addXTextLabel(x, "label"); 

Unix时间戳是Date对象返回的getTime()的值。 所以你可以在你的系列中添加这样的值:

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

然后,您可以为某些值添加自定义标签:

 SimpleDateFormat format = new SimpleDateFormat("ha"); renderer.addXTextLabel(date.getTime(), format.format(date.getTime())); 

我想为您的要求,创build自定义条形图将变得容易。这里是例子,你可以用这个例子开发简单地使用你想要显示在图上的5个数组。

Bar Chart in Android With out any Built in jars

只是,彻底的例子,并检查它。

主要优点是您不需要使用任何预定义的库来绘制图表。 这将是可能的简单的Android UI像TextView and ListView