最近在安卓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 achartengine统计图_第1张图片

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

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

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

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

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<String, Double> map = new TreeMap<String, Double>();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("最近31天");renderer.setXTitle("时间-天");renderer.setYTitle("发电量(Kw/h)");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("最近31天");     Calendar c = Calendar.getInstance();int month = c.get(Calendar.DAY_OF_MONTH)+1;int day =c.get(Calendar.DAY_OF_MONTH);map.put((month<10?("0"+month):month) + "-"+ (day<10?("0"+day):day), 0.0);for (int i = 0; i <= 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<10?("0"+month):month) + "-"+ (day<10?("0"+day):day), 0.0);}
                    //这里的list是我取出一个对象列表,自己可以找别的数据代替
                 if (list != null && list.size() > 0) {for (int i = 0; i < 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;
//这里比较重要,这里手动给X轴填刻度。有多少条内容,你就要天多少个刻度,这样X轴就显示的是时间,也能显示出长方形图
                for (String key : map.keySet()) {renderer.addTextLabel(count, key);count++;}return intent;}
            
}


Android achartengine统计图_第2张图片

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

更多相关文章

  1. Android仿iPhone的日期时间选择器
  2. Android 自定义日期和时间和星期的弹窗
  3. Android 的常用控件(下拉,日期,时间,单项,多项)
  4. Android中获取系统的时间
  5. android 显示系统时间
  6. android得到系统时间如何判断是白天还是晚上
  7. Android中多次弹出相同Toast提示框长时间不消失
  8. Android 自带日期(DatePicker)和时间(TimePicker)选择器使用
  9. Android 为【apk】文件签名,增加修改系统时间等权限

随机推荐

  1. 谷歌强推 AndroidX ,你还在应Support?
  2. Retrofit2.0+网络框架HTTP实战
  3. 如何在不同Android设备中得到有效的Audio
  4. Android中程序的停止状态详细介绍
  5. Ubuntu上搭建android BSP的开发编译环境
  6. android 7.0新特性,新功能,GMS4.0新特性
  7. Airbnb 动画库Lottie
  8. Android多线程处理机制中的Handler使用介
  9. 【Android】Macbook Pro 10.14(macOS Moja
  10. Android(安卓)Fragmnet的使用新体会