zoukankan      html  css  js  c++  java
  • 安卓图表引擎AChartEngine(二)

    首先看一下示例中类之间的关系:

    1. ChartDemo这个类是整个应用程序的入口,运行之后的效果显示一个list.

    2. IDemoChart接口,这个接口定义了三个方法,

    getName()返回值是listitem上显示的标题;

    getDesc()返回值是listitem上显示的描述内容.

    excute(context)返回值是一个Intent,当点击listitem后跳转到此Intent.

    3. AbstractDemoChart类是一个抽象类,实现接口IDemoChart接口,这个类中封装了构建DataSet和renderer的方法,目的快速构建我们的dataset和renderer.这个类具体提供了哪些方法呢?见下图.至于为什么要进行这样的封装看完4中ChartFactory.get***Intent()方法的参数类型后您就明白了.

    AbstractChartDemo.java: 

    [java] view plaincopy
     
    1. package org.achartengine.chartdemo.demo.chart;  
    2.   
    3. import java.util.Date;  
    4. import java.util.List;  
    5.   
    6. import org.achartengine.chart.PointStyle;  
    7. import org.achartengine.model.CategorySeries;  
    8. import org.achartengine.model.MultipleCategorySeries;  
    9. import org.achartengine.model.TimeSeries;  
    10. import org.achartengine.model.XYMultipleSeriesDataset;  
    11. import org.achartengine.model.XYSeries;  
    12. import org.achartengine.renderer.DefaultRenderer;  
    13. import org.achartengine.renderer.SimpleSeriesRenderer;  
    14. import org.achartengine.renderer.XYMultipleSeriesRenderer;  
    15. import org.achartengine.renderer.XYSeriesRenderer;  
    16.   
    17. public abstract class AbstractDemoChart implements IDemoChart {  
    18.   
    19.   /** 
    20.    * 构建 XYMultipleSeriesDataset. 
    21.    *  
    22.    * @param titles 每个序列的图例 
    23.    * @param xValues X轴的坐标 
    24.    * @param yValues Y轴的坐标 
    25.    * @return XYMultipleSeriesDataset 
    26.    */  
    27.   protected XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues,  
    28.       List<double[]> yValues) {  
    29.     XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
    30.     addXYSeries(dataset, titles, xValues, yValues, 0);  
    31.     return dataset;  
    32.   }  
    33.     
    34.   //向DataSet中添加序列.  
    35.   public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<double[]> xValues,  
    36.       List<double[]> yValues, int scale) {  
    37.     int length = titles.length;  
    38.     for (int i = 0; i < length; i++) {  
    39.       XYSeries series = new XYSeries(titles[i], scale); //这里注意与TimeSeries区别.  
    40.       double[] xV = xValues.get(i);  
    41.       double[] yV = yValues.get(i);  
    42.       int seriesLength = xV.length;  
    43.       for (int k = 0; k < seriesLength; k++) {  
    44.         series.add(xV[k], yV[k]);  
    45.       }  
    46.       dataset.addSeries(series);  
    47.     }  
    48.   }  
    49.   
    50.   /** 
    51.    * 构建XYMultipleSeriesRenderer. 
    52.    *  
    53.    * @param colors 每个序列的颜色 
    54.    * @param styles 每个序列点的类型(可设置三角,圆点,菱形,方块等多种) 
    55.    * @return XYMultipleSeriesRenderer 
    56.    */  
    57.   protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {  
    58.     XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();  
    59.     setRenderer(renderer, colors, styles);  
    60.     return renderer;  
    61.   }  
    62.   
    63.   protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {  
    64.     //整个图表属性设置  
    65.     //-->start  
    66.     renderer.setAxisTitleTextSize(16);//设置轴标题文字的大小  
    67.     renderer.setChartTitleTextSize(40);//设置整个图表标题文字的大小  
    68.     renderer.setLabelsTextSize(15);//设置轴刻度文字的大小  
    69.     renderer.setLegendTextSize(15);//设置图例文字大小  
    70.     renderer.setPointSize(5f);//设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)  
    71.     renderer.setMargins(new int[] { 20, 30, 15, 20 });//设置图表的外边框(上/左/下/右)  
    72.     //-->end  
    73.       
    74.     //以下代码设置没个序列的颜色.  
    75.     //-->start  
    76.     int length = colors.length;  
    77.     for (int i = 0; i < length; i++) {  
    78.       XYSeriesRenderer r = new XYSeriesRenderer();  
    79.       r.setColor(colors[i]);//设置颜色  
    80.       r.setPointStyle(styles[i]);  
    81.       renderer.addSeriesRenderer(r);  
    82.     }  
    83.     //-->end  
    84.   }  
    85.   
    86.   /** 
    87.    * 设置renderer的一些属性. 
    88.    *  
    89.    * @param renderer 要设置的renderer 
    90.    * @param title 图表标题 
    91.    * @param xTitle X轴标题 
    92.    * @param yTitle Y轴标题 
    93.    * @param xMin X轴最小值 
    94.    * @param xMax X轴最大值 
    95.    * @param yMin Y轴最小值 
    96.    * @param yMax Y轴最大值 
    97.    * @param axesColor X轴颜色 
    98.    * @param labelsColor Y轴颜色 
    99.    */  
    100.   protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,  
    101.       String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor,  
    102.       int labelsColor) {  
    103.     renderer.setChartTitle(title);  
    104.     renderer.setXTitle(xTitle);  
    105.     renderer.setYTitle(yTitle);  
    106.     renderer.setXAxisMin(xMin);  
    107.     renderer.setXAxisMax(xMax);  
    108.     renderer.setYAxisMin(yMin);  
    109.     renderer.setYAxisMax(yMax);  
    110.     renderer.setAxesColor(axesColor);  
    111.     renderer.setLabelsColor(labelsColor);  
    112.   }  
    113.   
    114.   /** 
    115.    * 构建和时间有关的XYMultipleSeriesDataset,这个方法与buildDataset在参数上区别是需要List<Date[]>作参数. 
    116.    *  
    117.    * @param titles 序列图例 
    118.    * @param xValues X轴值 
    119.    * @param yValues Y轴值 
    120.    * @return XYMultipleSeriesDataset 
    121.    */  
    122.   protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List<Date[]> xValues,  
    123.       List<double[]> yValues) {  
    124.     XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
    125.     int length = titles.length;  
    126.     for (int i = 0; i < length; i++) {  
    127.       TimeSeries series = new TimeSeries(titles[i]);//构建时间序列TimeSeries,  
    128.       Date[] xV = xValues.get(i);  
    129.       double[] yV = yValues.get(i);  
    130.       int seriesLength = xV.length;  
    131.       for (int k = 0; k < seriesLength; k++) {  
    132.         series.add(xV[k], yV[k]);  
    133.       }  
    134.       dataset.addSeries(series);  
    135.     }  
    136.     return dataset;  
    137.   }  
    138.   
    139.   /** 
    140.    * 构建单个CategorySeries,可用于生成饼图,注意与buildMultipleCategoryDataset(构建圆环图)相区别. 
    141.    *  
    142.    * @param titles the series titles 
    143.    * @param values the values 
    144.    * @return the category series 
    145.    */  
    146.   protected CategorySeries buildCategoryDataset(String title, double[] values) {  
    147.     CategorySeries series = new CategorySeries(title);  
    148.     int k = 0;  
    149.     for (double value : values) {  
    150.       series.add("Project " + ++k, value);  
    151.     }  
    152.   
    153.     return series;  
    154.   }  
    155.   
    156.   /** 
    157.    * 构建MultipleCategorySeries,可用于构建圆环图(每个环是一个序列) 
    158.    *  
    159.    * @param titles the series titles 
    160.    * @param values the values 
    161.    * @return the category series 
    162.    */  
    163.   protected MultipleCategorySeries buildMultipleCategoryDataset(String title,  
    164.       List<String[]> titles, List<double[]> values) {  
    165.     MultipleCategorySeries series = new MultipleCategorySeries(title);  
    166.     int k = 0;  
    167.     for (double[] value : values) {  
    168.       series.add(2007 + k + "", titles.get(k), value);  
    169.       k++;  
    170.     }  
    171.     return series;  
    172.   }  
    173.   
    174.   /** 
    175.    * 构建DefaultRenderer. 
    176.    *  
    177.    * @param colors 每个序列的颜色 
    178.    * @return DefaultRenderer 
    179.    */  
    180.   protected DefaultRenderer buildCategoryRenderer(int[] colors) {  
    181.     DefaultRenderer renderer = new DefaultRenderer();  
    182.     renderer.setLabelsTextSize(15);  
    183.     renderer.setLegendTextSize(15);  
    184.     renderer.setMargins(new int[] { 20, 30, 15, 0 });  
    185.     for (int color : colors) {  
    186.       SimpleSeriesRenderer r = new SimpleSeriesRenderer();  
    187.       r.setColor(color);  
    188.       renderer.addSeriesRenderer(r);  
    189.     }  
    190.     return renderer;  
    191.   }  
    192.   
    193.   /** 
    194.    * 构建XYMultipleSeriesDataset,适用于柱状图. 
    195.    *  
    196.    * @param titles 每中柱子序列的图列 
    197.    * @param values 柱子的高度值 
    198.    * @return XYMultipleSeriesDataset 
    199.    */  
    200.   protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) {  
    201.     XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
    202.     int length = titles.length;  
    203.     for (int i = 0; i < length; i++) {  
    204.       CategorySeries series = new CategorySeries(titles[i]);  
    205.       double[] v = values.get(i);  
    206.       int seriesLength = v.length;  
    207.       for (int k = 0; k < seriesLength; k++) {  
    208.         series.add(v[k]);  
    209.       }  
    210.       dataset.addSeries(series.toXYSeries());  
    211.     }  
    212.     return dataset;  
    213.   }  
    214.   
    215.   /** 
    216.    * 构建XYMultipleSeriesRenderer,适用于柱状图. 
    217.    *  
    218.    * @param colors 每个序列的颜色 
    219.    * @return XYMultipleSeriesRenderer 
    220.    */  
    221.   protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {  
    222.     XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();  
    223.     renderer.setAxisTitleTextSize(16);  
    224.     renderer.setChartTitleTextSize(20);  
    225.     renderer.setLabelsTextSize(15);  
    226.     renderer.setLegendTextSize(15);  
    227.     int length = colors.length;  
    228.     for (int i = 0; i < length; i++) {  
    229.       SimpleSeriesRenderer r = new SimpleSeriesRenderer();  
    230.       r.setColor(colors[i]);  
    231.       renderer.addSeriesRenderer(r);  
    232.     }  
    233.     return renderer;  
    234.   }  
    235.   
    236. }  

    4.  其他的以*Chat结尾的类大都继承自AbstractDemoChart这个类实现了接口IDemoChart.我们可以重点看一下execute(context)方法,分析之后发现这个方法中构建Intent的步骤大同小异,第一步构建dataset,第二步构建renderer,第三步调用ChartFactory.get***Intent()方法或ChartFactory.get***View()方法,二者的区别在于一个返回Intent,这个intent可以启动一个特定的activity,另一个返回GraphicalView,对这个GraphicalView可以灵活设置也可以仅作为一部分显示在任何activity上.对于ChartFactory.get***Intent()上的参数activityTitle是指设置显示在activity上的标题.

    条形图

    static android.content.Intent

    getBarChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer,BarChart.Type type) 

    条形图

    static android.content.Intent

    getBarChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer,BarChart.Type type, java.lang.String activityTitle) 

    条形图

    static GraphicalView

    getBarChartView(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer,BarChart.Type type) 

    气泡图

    static android.content.Intent

    getBubbleChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer) 

    气泡图

    static android.content.Intent

    getBubbleChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, java.lang.String activityTitle) 

    气泡图

    static GraphicalView

    getBubbleChartView(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer) 

    组合图

    static android.content.Intent

    getCombinedXYChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, java.lang.String[] types, java.lang.String activityTitle) 

    组合图

    static GraphicalView

    getCombinedXYChartView(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, java.lang.String[] types) 

    立方折线图

    static GraphicalView

    getCubeLineChartView(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, float smoothness) 

    立方折线图

    static android.content.Intent

    getCubicLineChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, float smoothness) 

    立方折线图

    static android.content.Intent

    getCubicLineChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, float smoothness, java.lang.String activityTitle) 

    拨号盘

    static android.content.Intent

    getDialChartIntent(android.content.Context context,CategorySeries dataset, DialRenderer renderer, java.lang.String activityTitle) 

    拨号盘

    static GraphicalView

    getDialChartView(android.content.Context context, CategorySeries dataset,DialRenderer renderer) 

    圆环图

    static android.content.Intent

    getDoughnutChartIntent(android.content.Context context,MultipleCategorySeries dataset, DefaultRenderer renderer, java.lang.String activityTitle) 

    圆环图

    static GraphicalView

    getDoughnutChartView(android.content.Context context,MultipleCategorySeries dataset, DefaultRenderer renderer) 

    圆环图

    static android.content.Intent

    getLineChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer) 

    折线图

    static android.content.Intent

    getLineChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, java.lang.String activityTitle) 

    折线图

    static GraphicalView

    getLineChartView(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer) 

    饼图

    static android.content.Intent

    getPieChartIntent(android.content.Context context, CategorySeries dataset,DefaultRenderer renderer, java.lang.String activityTitle) 

    饼图

    static GraphicalView

    getPieChartView(android.content.Context context, CategorySeries dataset,DefaultRenderer renderer) 

    范围条形图

    static android.content.Intent

    getRangeBarChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer,BarChart.Type type, java.lang.String activityTitle) 

    范围条形图

    static GraphicalView

    getRangeBarChartView(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer,BarChart.Type type) 

    散点图

    static android.content.Intent

    getScatterChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer) 

    散点图

    static android.content.Intent

    getScatterChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, java.lang.String activityTitle) 

    散点图

    static GraphicalView

    getScatterChartView(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer) 

    时间图

    static android.content.Intent

    getTimeChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, java.lang.String format) 

    时间图

    static android.content.Intent

    getTimeChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, java.lang.String format, java.lang.String activityTitle) 

    时间图

    static GraphicalView

    getTimeChartView(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, java.lang.String format) 

    安卓图表引擎AChartEngine(一) - 简介

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

     安卓图表引擎AChartEngine(二) - 示例源码概述和分析

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

    安卓图表引擎AChartEngine(三) - 示例源码折线图、饼图和柱状图

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

    安卓图表引擎AChartEngine(四) - 源码示例嵌入Acitivity中的折线图

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

    安卓图表引擎AChartEngine(五) - Render和Dataset参数介绍

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

    安卓图表引擎AChartEngine(六) - 框架源码结构图

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

  • 相关阅读:
    树上后缀排序
    省选模拟赛day4
    吉司机线段树
    虚树复习
    bzoj 3065: 带插入区间K小值
    luogu P2462 [SDOI2007]游戏
    luogu P3783 [SDOI2017]天才黑客
    企业为取得交易性金融资产发生的交易费用应记入到投资收益科目
    旧手机数据迁移到新手机
    应收票据业务操作(背书、背书退回、退票)
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/4984542.html
Copyright © 2011-2022 走看看