aChartEngine小结

        自学安卓和java有一段时间了,毕设用到什么,就现学什么,经常看别人博客,今天还是第一次自己写博客。发现学编程还是要学会知识点小结,在这之前,也会在笔记本上做笔记,但慢慢发现,这种方式知识点框架太凌乱了,有的时候半天找不到这个知识点在哪本笔记本哪页纸上,摘抄一些api效率也比较低,也没有对知识点做更深层次的理解和总结,实现了功能就完事了,但感觉这样下去不适合长期深远发展。总之,尝试换这种博客总结知识点的方式继续学习,希望自己坚持下去。对程序媛这行还是蛮喜欢的,因为总有那么多的好心人,不懂的不会的,百度总是能找到启发。

      废话不多说,最近毕设用到画各种图,使用了achartengine的框架。在看了很多相关博客的基础上,按照自己的思路总结下:

       写的比较好的博客原文地址:

http://blog.csdn.net/shulianghan/article/details/38420197

http://www.cnblogs.com/zhangchaot/p/5892638.html

http://www.tuicool.com/articles/r6zMne

http://www.cnblogs.com/wangfeng520/p/5655767.html

http://blog.csdn.net/lk_blog/article/details/7645661


(1)原理框架

AChartEngine 运行示例图 : 每个图表都需要一个数据集 (Dataset) 和 渲染器集合 (Renderer);

-- 数据集 : 又由许多数据组成, 

-- 渲染器 : 也由不同的子渲染器组成, 

-- 获取Activity 或 组件 : 图表工厂 (ChartFactory) 通过调用 数据集 (Dataset) 和 渲染器集合 (Renderer) 可以生成带图表的 GraphicalView 或者 GraphicalActivity;

aChartEngine小结_第1张图片

XYSeries类:(x,y)点集
   XYMultipleSeriesDataset类:多个 (x,y)组。数据集
3.org.achartengine.renderer
   DefaultRenderer类:默认渲染器
    XYMultipleSeries Renderer类:继承上类,多XY点渲染器
          setZoomButtonVisible(boolean)  放大缩小button
   SimpleSeries Renderer类
    XYSeries Renderer类:继承上边,
        setDisplayChartValues(boolean)
        setDisplayChartValueDistance(10)
4. org.achartengine
   GraphicView类:继承自View类,
   ChartFactory类:各种图表集合
5.AbstractDemoChart类:包含建立数据集合和渲染器的一些方法,是一个抽象类
    addXYSeries( XYMultipleSeriesDataset,String[],List, List,int scale ):向dataset中加入多组坐标系。
    buildDataset( String[],List, List ):返回dataset对象。

    buildRenderer(int[] colors,PointStyle[] ):返回渲染器实例。
    setChartSettings:设置坐标系的参数,包括坐标系标题,X轴标题,Y轴标题,X,Y轴最大最小值,颜色。
     buildDateDataset( String[],List, List ):返回X轴是日期的dataset对象。

   

7.正常用法:
   ①在layout xml文件中留一块LinearLayout用来放view。
   ②在相应activity中用findviewbyid指定该layout对象;创建GraphicView对象,获得 XYMultipleSeriesDataset, XYMultipleSeries Renderer对象,之后设置图表格式setchartsetting;
   ③ GraphicView对象=ChartFactory.getLineChartView(context,dataset,renderer)。
   ④ LinearLayout.addView( GraphicView对象, new LayoutParams(FILL,FILL) )。

     




(2)常用的知识点技巧

1、

/自定义X轴的字符串标签
 //自定义X轴的字符串标签
        String[] test = {"液位","压力","气耗量","真空度","加气次数"};
        for(int i=0;i<5;i++){
            renderer.addXTextLabel(i+1, test[i]);
        }
        
        //如果想要在X轴显示自定义的标签,那么首先要设置renderer.setXLabels(0);  
        //如果不设置为0,那么所设置的Labels会与原X坐标轴labels重叠
        renderer.setXLabels(0);
2、饼状图每个颜色设置
 for (int color : colors) {
17           SimpleSeriesRenderer r = new SimpleSeriesRenderer();
18           r.setColor(color);
19           renderer.addSeriesRenderer(r);
20         }
饼状图(每个不同颜色)
 
  
int[] colors={Color.BLUE,Color.GREEN,Color.MAGENTA,Color.RED};
2 DefaultRenderer renderer=buildCategoryRenderer(colors);
protected DefaultRenderer buildCategoryRenderer(int[] colors) {
 2         DefaultRenderer renderer = new DefaultRenderer();
 3        
 4         renderer.setLegendTextSize(20);//设置左下角表注的文字大小
 5       //renderer.setZoomButtonsVisible(true);//设置显示放大缩小按钮  
 6         renderer.setZoomEnabled(false);//设置不允许放大缩小.  
 7           renderer.setChartTitleTextSize(30);//设置图表标题的文字大小
 8           renderer.setChartTitle("统计结果");//设置图表的标题  默认是居中顶部显示
 9           renderer.setLabelsTextSize(20);//饼图上标记文字的字体大小
10           //renderer.setLabelsColor(Color.WHITE);//饼图上标记文字的颜色
11           renderer.setPanEnabled(false);//设置是否可以平移
12           //renderer.setDisplayValues(true);//是否显示值
13           renderer.setClickEnabled(true);//设置是否可以被点击
14         renderer.setMargins(new int[] { 20, 30, 15,0 });
15         //margins - an array containing the margin size values, in this order: top, left, bottom, right
16         for (int color : colors) {
17           SimpleSeriesRenderer r = new SimpleSeriesRenderer();
18           r.setColor(color);
19           renderer.addSeriesRenderer(r);
20         }
21         return renderer;
22       }

柱状图(每组不同颜色)
 protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {
 2             XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
 3             renderer.setAxisTitleTextSize(16);
 4             renderer.setChartTitleTextSize(20);
 5             renderer.setLabelsTextSize(15);
 6             renderer.setLegendTextSize(15);
 7             int length = colors.length;
 8             for (int i = 0; i < length; i++) {
 9                 SimpleSeriesRenderer r = new SimpleSeriesRenderer();
10                 r.setColor(colors[i]);
11                 renderer.addSeriesRenderer(r);
12             }
13             return renderer;
14         }

3、不同的种类不同的api
折线图:
private XYMultipleSeriesRenderer buildRenderer(int[] colors,  PointStyle[] styles) {}
private void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {}
private void setChartSettings(XYMultipleSeriesRenderer renderer,String title, String xTitle, String yTitle,
          double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) {}
private XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues, List<double[]> yValues) {}
private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles  , List<double[]> xValues, 
          List<double[]> yValues, int scale) {}
使用
 setChartSettings(renderer, title, "", "", 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY);
 View view = ChartFactory.getLineChartView(this, buildDataset(titles, x, values), renderer);
  view.setBackgroundColor(Color.BLACK);


饼状图
 protected DefaultRenderer buildCategoryRenderer(int[] colors) {}
 
 protected CategorySeries buildCategoryDataset(String title,  ArrayList list) {}
// 饼状图文字信息和对应的百分比
View view = ChartFactory.getPieChartView(this,    buildCategoryDataset("Project budget", list), renderer);

柱状图

 // 描绘器设置
 public XYMultipleSeriesRenderer getBarRenderer(ArrayList informations) {}
 private void setChartSettings(XYMultipleSeriesRenderer renderer,ArrayList informations) {}
 // 数据设置
 private XYMultipleSeriesDataset getBarDataset( ArrayList informations) {}
 View view = ChartFactory.getBarChartView(this, getBarDataset(list),getBarRenderer(list), 
              Type.STACKED); // Type.STACKED
博客地址 http://www.cnblogs.com/zhangchaot/p/5892638.html

http://www.cnblogs.com/huangjialin/p/5613435.html









4、数据实时和读取
参考博客地址:  
画图achartengine
基于Android便携式健康监测系统——Android系统开发设计
http://wenku.baidu.com/link?url=mWNBycGTS_sI-c75usVzzQO2ld9Vph4Sz3cGCgd4O-ba78TE-iJLMoQilwha7aoqeq8S-DVBQ5dB_ZkpVwl-0hI7akGNWpzZ_gp6GkhPdqC


Android利用Achartengine实现实时曲线图
http://blog.csdn.net/lamelias/article/details/41894433
http://www.jizhuomi.com/android/environment/130.html
http://mobile.51cto.com/design-447554.htm
http://blog.csdn.net/eastmoon502136/article/details/51049111
http://www.cnblogs.com/tijing/archive/2012/09/13/2682854.html
http://blog.csdn.net/best2012power/article/details/49950195(安卓动态曲线的绘制)
http://www.java123.net/1001350.html
好了,今天就整理到这里,赶脚就是把自己查阅的资料按照自己的逻辑理顺了一下,方面下次快速查找。2016.12.19
补充:
(1)使用这个jar包画出来折线图,背景的四周却总是黑黑的。


后来在用到这个属性时:
[java] view plain copy print?
mRenderer.setMargins(new int[]{20,30,50,20});   //设置边距,  
        //分别为:1.距离顶端标题的距离、2.距离屏幕左边的距离、 3.X坐标标题与点图例的距离、 4.距离屏幕右边的距离  


才意识到,这四周可能是Margin,然后找方法,果然有个
[java] view plain copy print?
mRenderer.setMarginsColor(0xffffff);
(2)如何设置背景色:
Java代码  
renderer.setApplyBackgroundColor(true);//是否可以自定义背景色  
        renderer.setBackgroundColor(Color.BLACK); //chart内部的背景色  
        renderer.setMarginsColor(Color.BLACK);//chart边缘部分的背景色




你可能感兴趣的:(【安卓】)