[转] Android(安卓)achartengine统计图
最近打算研究一些开源android项目 mark一下
转自: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所有的类
如果你想X轴显示时间并且要画的长方形图的话,那么麻烦来了。X轴如果想要显示时间的话,要使用TimeChart,而TimeChart继承与LineChart,也就是说,TimeChart只能显示线性的统计图。my god!这什么东西呀,做的也太不行了吧,我顿时就恼火了。那我X轴既要显示时间,又要显示长方形图怎么办?以下是我的解决方案。
如果想要显示长方形图,我们只能采用BarChart了,所以只能在它上面动手脚。
以下是我做的例子,供碰到同样的问题的鞋子们参考:
期望功能:以长方形图显示31天内的数据信息。
view plain print ?- importjava.util.Calendar;
- importjava.util.List;
- importjava.util.Map;
- importjava.util.TreeMap;
- importorg.achartengine.ChartFactory;
- importorg.achartengine.chart.BarChart.Type;
- importorg.achartengine.model.CategorySeries;
- importorg.achartengine.model.XYMultipleSeriesDataset;
- importorg.achartengine.renderer.XYMultipleSeriesRenderer;
- importorg.achartengine.renderer.XYSeriesRenderer;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.graphics.Color;
- publicclassRecent31DayActivity{
- privatestaticMap<String,Double>map=newTreeMap<String,Double>();
- privatestaticXYMultipleSeriesRenderergetBarDemoRenderer(){
- XYMultipleSeriesRendererrenderer=newXYMultipleSeriesRenderer();
- renderer.setAxisTitleTextSize(12);
- renderer.setChartTitleTextSize(12);
- renderer.setLabelsTextSize(12);
- renderer.setLegendTextSize(12);
- renderer.setMargins(newint[]{20,30,15,0});
- XYSeriesRendererr=newXYSeriesRenderer();
- r.setColor(Color.RED);
- renderer.addSeriesRenderer(r);
- returnrenderer;
- }
- privatestaticvoidsetChartSettings(XYMultipleSeriesRendererrenderer){
- 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);
- }
- privatestaticXYMultipleSeriesDatasetgetBarDataset(Contextcxt){
- XYMultipleSeriesDatasetdataset=newXYMultipleSeriesDataset();
- CategorySeriesseries=newCategorySeries("最近31天");Calendarc=Calendar.getInstance();
- intmonth=c.get(Calendar.DAY_OF_MONTH)+1;
- intday=c.get(Calendar.DAY_OF_MONTH);
- map.put((month<10?("0"+month):month)+"-"
- +(day<10?("0"+day):day),0.0);
- for(inti=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(inti=0;i<list.size();i++){
- if(map.containsKey(key)){
- map.put(key,min.getElectricalEnergy());
- }
- }
- }
- for(Stringkey:map.keySet()){
- series.add(key,Utils.getDoublePointTwo(map.get(key)));
- }
- dataset.addSeries(series.toXYSeries());
- returndataset;
- }
- publicIntentRecent31DayActivity(Contextcontext){
- XYMultipleSeriesRendererrenderer=getBarDemoRenderer();
- setChartSettings(renderer);
- Intentintent=ChartFactory.getBarChartIntent(context,
- getBarDataset(context),renderer,Type.DEFAULT);
- intcount=1;
- //这里比较重要,这里手动给X轴填刻度。有多少条内容,你就要天多少个刻度,这样X轴就显示的是时间,也能显示出长方形图
- for(Stringkey:map.keySet()){
- renderer.addTextLabel(count,key);
- count++;
- }
- returnintent;
- <blockquote>}</blockquote>
如果大家有什么不明白的话,或者对属性设置不明白的话,可以问我。不过这东西api就那么几个类,看api文档就够了。
更多相关文章
- TextView 中显示图片
- Android(安卓)UI(三)SlidingMenu实现滑动菜单(详细 官方)
- Android获取时间
- Android简单实现 高德地图的定位与显示,点击按钮切换地图图层
- Android使用自定义view在指定时间内匀速画一条直线的实例代码
- Android上 ExpandableListActivity及CursorTreeAdapter的使用简
- android用户界面-组件Widget-网格视图GridView
- Android(安卓)PreferenceActivity简单使用
- Android应用开发UI(日期和时间)