原文链接:http://blog.csdn.net/closewbq/article/details/6589547

最近在安卓2.2上写个实时的监控程序,要用到统计图。从网上搜了下

Java4Less (http://java4less.com/charts/chart.php?info=android)
- Chart4J (http://code.google.com/p/charts4j/)
- BlueChart (http://code.google.com/p/bluechart/)- aChartEngine (http://code.google.com/p/achartengine/)
- aiCharts (http://www.artfulbits.com/Android/aiCharts.aspx)

主要有以上几种。

java4Less统计的图的形状还算好看,但是如果屏幕分辨率很小的时候,不能进行缩放。

aChartEngine这个东西api太过于简单,支持的东西也太少,但是可以进行缩放。

aiCharts 这个东东做的比较好,基本达到了.net中Chart控件的水平,可是要收费。用试用版的话,还要给你带个试用的标记。(这个垃圾- -!)

最终决定用aChartEngine进行统计。

我想说的是不是如何去使用aChartEngine画图,而是想说说我碰到的问题。

以上是aChartEngine-6.0所有的类

[Android]Android achartengine统计图_第1张图片

如果你想X轴显示时间并且要画的长方形图的话,那么麻烦来了。X轴如果想要显示时间的话,要使用TimeChart,而TimeChart继承与LineChart,也就是说,TimeChart只能显示线性的统计图。my god!这什么东西呀,做的也太不行了吧,我顿时就恼火了。那我X轴既要显示时间,又要显示长方形图怎么办?以下是我的解决方案。

如果想要显示长方形图,我们只能采用BarChart了,所以只能在它上面动手脚。

以下是我做的例子,供碰到同样的问题的鞋子们参考:

期望功能:以长方形图显示31天内的数据信息。

view plain copy to clipboard print ?
  1. importjava.util.Calendar;
  2. importjava.util.List;
  3. importjava.util.Map;
  4. importjava.util.TreeMap;
  5. importorg.achartengine.ChartFactory;
  6. importorg.achartengine.chart.BarChart.Type;
  7. importorg.achartengine.model.CategorySeries;
  8. importorg.achartengine.model.XYMultipleSeriesDataset;
  9. importorg.achartengine.renderer.XYMultipleSeriesRenderer;
  10. importorg.achartengine.renderer.XYSeriesRenderer;
  11. importandroid.content.Context;
  12. importandroid.content.Intent;
  13. importandroid.graphics.Color;
  14. publicclassRecent31DayActivity{
  15. privatestaticMap<String,Double>map=newTreeMap<String,Double>();
  16. privatestaticXYMultipleSeriesRenderergetBarDemoRenderer(){
  17. XYMultipleSeriesRendererrenderer=newXYMultipleSeriesRenderer();
  18. renderer.setAxisTitleTextSize(12);
  19. renderer.setChartTitleTextSize(12);
  20. renderer.setLabelsTextSize(12);
  21. renderer.setLegendTextSize(12);
  22. renderer.setMargins(newint[]{20,30,15,0});
  23. XYSeriesRendererr=newXYSeriesRenderer();
  24. r.setColor(Color.RED);
  25. renderer.addSeriesRenderer(r);
  26. returnrenderer;
  27. }
  28. privatestaticvoidsetChartSettings(XYMultipleSeriesRendererrenderer){
  29. renderer.setChartTitle("最近31天");
  30. renderer.setXTitle("时间-天");
  31. renderer.setYTitle("发电量(Kw/h)");
  32. renderer.setYAxisMin(0);
  33. renderer.setXAxisMin(0.5);
  34. renderer.setXAxisMax(12.5);
  35. renderer.setShowLegend(false);
  36. renderer.setShowLabels(true);
  37. renderer.setShowGrid(true);
  38. renderer.setXLabels(1);
  39. renderer.setDisplayChartValues(true);
  40. renderer.setBarSpacing(0.5);
  41. renderer.setBackgroundColor(Color.WHITE);
  42. }
  43. privatestaticXYMultipleSeriesDatasetgetBarDataset(Contextcxt){
  44. XYMultipleSeriesDatasetdataset=newXYMultipleSeriesDataset();
  45. CategorySeriesseries=newCategorySeries("最近31天");Calendarc=Calendar.getInstance();
  46. intmonth=c.get(Calendar.DAY_OF_MONTH)+1;
  47. intday=c.get(Calendar.DAY_OF_MONTH);
  48. map.put((month<10?("0"+month):month)+"-"
  49. +(day<10?("0"+day):day),0.0);
  50. for(inti=0;i<=30;i++){
  51. c.add(Calendar.DAY_OF_YEAR,-1);
  52. day=c.get(Calendar.DAY_OF_MONTH);
  53. month=c.get(Calendar.MONTH)+1;
  54. map.put((month<10?("0"+month):month)+"-"
  55. +(day<10?("0"+day):day),0.0);
  56. }
<textarea style="DISPLAY: none" class="java" readonly="readonly" name="code">import java.util.Calendar; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.achartengine.ChartFactory; import org.achartengine.chart.BarChart.Type; import org.achartengine.model.CategorySeries; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import android.content.Context; import android.content.Intent; import android.graphics.Color; public class Recent31DayActivity { private static Map&lt;String, Double&gt; map = new TreeMap&lt;String, Double&gt;(); private static XYMultipleSeriesRenderer getBarDemoRenderer() { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); renderer.setAxisTitleTextSize(12); renderer.setChartTitleTextSize(12); renderer.setLabelsTextSize(12); renderer.setLegendTextSize(12); renderer.setMargins(new int[] { 20, 30, 15, 0 }); XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(Color.RED); renderer.addSeriesRenderer(r); return renderer; } private static void setChartSettings(XYMultipleSeriesRenderer renderer) { renderer.setChartTitle(&quot;最近31天&quot;); renderer.setXTitle(&quot;时间-天&quot;); renderer.setYTitle(&quot;发电量(Kw/h)&quot;); renderer.setYAxisMin(0); renderer.setXAxisMin(0.5); renderer.setXAxisMax(12.5); renderer.setShowLegend(false); renderer.setShowLabels(true); renderer.setShowGrid(true); renderer.setXLabels(1); renderer.setDisplayChartValues(true); renderer.setBarSpacing(0.5); renderer.setBackgroundColor(Color.WHITE); } private static XYMultipleSeriesDataset getBarDataset(Context cxt) { XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); CategorySeries series = new CategorySeries(&quot;最近31天&quot;); Calendar c = Calendar.getInstance(); int month = c.get(Calendar.DAY_OF_MONTH)+1; int day =c.get(Calendar.DAY_OF_MONTH); map.put((month&lt;10?(&quot;0&quot;+month):month) + &quot;-&quot; + (day&lt;10?(&quot;0&quot;+day):day), 0.0); for (int i = 0; i &lt;= 30; i++) { c.add(Calendar.DAY_OF_YEAR, -1); day=c.get(Calendar.DAY_OF_MONTH); month=c.get(Calendar.MONTH) + 1; map.put((month&lt;10?(&quot;0&quot;+month):month) + &quot;-&quot; + (day&lt;10?(&quot;0&quot;+day):day), 0.0); } </textarea> view plain copy to clipboard print ?
  1. //这里的list是我取出一个对象列表,自己可以找别的数据代替
<textarea style="DISPLAY: none" class="java" readonly="readonly" name="code"> //这里的list是我取出一个对象列表,自己可以找别的数据代替</textarea> view plain copy to clipboard print ?
  1. if(list!=null&&list.size()>0){
  2. for(inti=0;i<list.size();i++){
  3. if(map.containsKey(key)){
  4. map.put(key,min.getElectricalEnergy());
  5. }
  6. }
  7. }
  8. for(Stringkey:map.keySet()){
  9. series.add(key,Utils.getDoublePointTwo(map.get(key)));
  10. }
  11. dataset.addSeries(series.toXYSeries());
  12. returndataset;
  13. }
  14. publicIntentRecent31DayActivity(Contextcontext){
  15. XYMultipleSeriesRendererrenderer=getBarDemoRenderer();
  16. setChartSettings(renderer);
  17. Intentintent=ChartFactory.getBarChartIntent(context,
  18. getBarDataset(context),renderer,Type.DEFAULT);
  19. intcount=1;
<textarea style="DISPLAY: none" class="java" readonly="readonly" name="code"> if (list != null &amp;&amp; list.size() &gt; 0) { for (int i = 0; i &lt; list.size(); i++) { if (map.containsKey(key)) { map.put(key, min.getElectricalEnergy()); } } } for (String key : map.keySet()) { series.add(key, Utils.getDoublePointTwo(map.get(key))); } dataset.addSeries(series.toXYSeries()); return dataset; } public Intent Recent31DayActivity(Context context) { XYMultipleSeriesRenderer renderer = getBarDemoRenderer(); setChartSettings(renderer); Intent intent = ChartFactory.getBarChartIntent(context, getBarDataset(context), renderer, Type.DEFAULT); int count = 1;</textarea> view plain copy to clipboard print ?
  1. //这里比较重要,这里手动给X轴填刻度。有多少条内容,你就要天多少个刻度,这样X轴就显示的是时间,也能显示出长方形图
<textarea style="DISPLAY: none" class="java" readonly="readonly" name="code">//这里比较重要,这里手动给X轴填刻度。有多少条内容,你就要天多少个刻度,这样X轴就显示的是时间,也能显示出长方形图</textarea> view plain copy to clipboard print ?
  1. for(Stringkey:map.keySet()){
  2. renderer.addTextLabel(count,key);
  3. count++;
  4. }
  5. returnintent;
<textarea style="DISPLAY: none" class="java" readonly="readonly" name="code"> for (String key : map.keySet()) { renderer.addTextLabel(count, key); count++; } return intent; } </textarea> view plain copy to clipboard print ?
  1. <blockquote>}</blockquote>
<textarea style="DISPLAY: none" class="java" readonly="readonly" name="code">&lt;blockquote&gt;}&lt;/blockquote&gt;</textarea>


[Android]Android achartengine统计图_第2张图片

如果大家有什么不明白的话,或者对属性设置不明白的话,可以问我。不过这东西api就那么几个类,看api文档就够了。

更多相关文章

  1. Android 选择器 PickerView实例,时间选择器、地址选择器、单项选
  2. android 日期时间格式转换;软键盘显示消失;获取系统title
  3. Android 时间对象操作工具类
  4. 使Android原生时间选择器样式为滚轮
  5. (20120808)(01)android菜单与对话框--之日期及时间选择对话框
  6. Android中获取时间
  7. Android获取系统时间
  8. Android之日期及时间选择对话框
  9. Android自带Music播放器更新播放时间和进度条的方法

随机推荐

  1. PHP网络请求插件Guzzle使用
  2. 程序员还看带广告的小说?
  3. 使用PHP反射机制获取函数文档
  4. PHP快速搭建一个简单的QQ机器人
  5. PHP实现驼峰命名和下划线命名互转
  6. PHP之你不得不知道的COOKIE含义及使用方
  7. PHP百钱百鸡问题(三种解题思路及答案)
  8. 如何用PHP代码生成金字塔
  9. PHP路由库FastRoute的使用教程
  10. PHP日期时间快速入门(图文详解)