安卓圖表引擎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:

  1. [size=3]package org.achartengine.chartdemo.demo.chart;  

  2.     import java.util.Date;  [/size]      [size=3]
  3.     import java.util.List;  

  4.     import org.achartengine.chart.PointStyle;  [/size]      [size=3]
  5.     import org.achartengine.model.CategorySeries;  
  6.     import org.achartengine.model.MultipleCategorySeries;  
  7.     import org.achartengine.model.TimeSeries;  
  8.     import org.achartengine.model.XYMultipleSeriesDataset;  
  9.     import org.achartengine.model.XYSeries;  
  10.     import org.achartengine.renderer.DefaultRenderer;  
  11.     import org.achartengine.renderer.SimpleSeriesRenderer;  
  12.     import org.achartengine.renderer.XYMultipleSeriesRenderer;  
  13.     import org.achartengine.renderer.XYSeriesRenderer;  

  14.     public abstract class AbstractDemoChart implements IDemoChart {  [/size]      [size=3]

  15.       /** [/size]      [size=3]
  16.        * 構建 XYMultipleSeriesDataset.
  17.        *  
  18.        * @param titles 每個序列的圖例
  19.        * @param xValues X軸的座標
  20.        * @param yValues Y軸的座標
  21.        * @return XYMultipleSeriesDataset
  22.        */  
  23.       protected XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues,  
  24.           List<double[]> yValues) {  
  25.         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
  26.         addXYSeries(dataset, titles, xValues, yValues, 0);  
  27.         return dataset;  
  28.       }  

  29.       //向DataSet中添加序列.  [/size]        [size=3]
  30.       public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<double[]> xValues,  
  31.           List<double[]> yValues, int scale) {  
  32.         int length = titles.length;  
  33.         for (int i = 0; i < length; i++) {  
  34.           XYSeries series = new XYSeries(titles[i], scale); //這裏注意與TimeSeries區別.  
  35.           double[] xV = xValues.get(i);  
  36.           double[] yV = yValues.get(i);  
  37.           int seriesLength = xV.length;  
  38.           for (int k = 0; k < seriesLength; k++) {  
  39.             series.add(xV[k], yV[k]);  
  40.           }  
  41.           dataset.addSeries(series);  
  42.         }  
  43.       }  

  44.       /** [/size]      [size=3]
  45.        * 構建XYMultipleSeriesRenderer.
  46.        *  
  47.        * @param colors 每個序列的顏色
  48.        * @param styles 每個序列點的類型(可設置三角,圓點,菱形,方塊等多種)
  49.        * @return XYMultipleSeriesRenderer
  50.        */  
  51.       protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {  
  52.         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();  
  53.         setRenderer(renderer, colors, styles);  
  54.         return renderer;  
  55.       }  

  56.       protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {  [/size]      [size=3]
  57.         //整個圖表屬性設置  
  58.         //-->start  
  59.         renderer.setAxisTitleTextSize(16);//設置軸標題文字的大小  
  60.         renderer.setChartTitleTextSize(40);//設置整個圖表標題文字的大小  
  61.         renderer.setLabelsTextSize(15);//設置軸刻度文字的大小  
  62.         renderer.setLegendTextSize(15);//設置圖例文字大小  
  63.         renderer.setPointSize(5f);//設置點的大小(圖上顯示的點的大小和圖例中點的大小都會被設置)  
  64.         renderer.setMargins(new int[] { 20, 30, 15, 20 });//設置圖表的外邊框(上/左/下/右)  
  65.         //-->end  

  66.         //以下代碼設置沒個序列的顏色.  [/size]          [size=3]
  67.         //-->start  
  68.         int length = colors.length;  
  69.         for (int i = 0; i < length; i++) {  
  70.           XYSeriesRenderer r = new XYSeriesRenderer();  
  71.           r.setColor(colors[i]);//設置顏色  
  72.           r.setPointStyle(styles[i]);  
  73.           renderer.addSeriesRenderer(r);  
  74.         }  
  75.         //-->end  
  76.       }  

  77.       /** [/size]      [size=3]
  78.        * 設置renderer的一些屬性.
  79.        *  
  80.        * @param renderer 要設置的renderer
  81.        * @param title 圖表標題
  82.        * @param xTitle X軸標題
  83.        * @param yTitle Y軸標題
  84.        * @param xMin X軸最小值
  85.        * @param xMax X軸最大值
  86.        * @param yMin Y軸最小值
  87.        * @param yMax Y軸最大值
  88.        * @param axesColor X軸顏色
  89.        * @param labelsColor Y軸顏色
  90.        */  
  91.       protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,  
  92.           String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor,  
  93.           int labelsColor) {  
  94.         renderer.setChartTitle(title);  
  95.         renderer.setXTitle(xTitle);  
  96.         renderer.setYTitle(yTitle);  
  97.         renderer.setXAxisMin(xMin);  
  98.         renderer.setXAxisMax(xMax);  
  99.         renderer.setYAxisMin(yMin);  
  100.         renderer.setYAxisMax(yMax);  
  101.         renderer.setAxesColor(axesColor);  
  102.         renderer.setLabelsColor(labelsColor);  
  103.       }  

  104.       /** [/size]      [size=3]
  105.        * 構建和時間有關的XYMultipleSeriesDataset,這個方法與buildDataset在參數上區別是需要List<Date[]>作參數.
  106.        *  
  107.        * @param titles 序列圖例
  108.        * @param xValues X軸值
  109.        * @param yValues Y軸值
  110.        * @return XYMultipleSeriesDataset
  111.        */  
  112.       protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List<Date[]> xValues,  
  113.           List<double[]> yValues) {  
  114.         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
  115.         int length = titles.length;  
  116.         for (int i = 0; i < length; i++) {  
  117.           TimeSeries series = new TimeSeries(titles[i]);//構建時間序列TimeSeries,  
  118.           Date[] xV = xValues.get(i);  
  119.           double[] yV = yValues.get(i);  
  120.           int seriesLength = xV.length;  
  121.           for (int k = 0; k < seriesLength; k++) {  
  122.             series.add(xV[k], yV[k]);  
  123.           }  
  124.           dataset.addSeries(series);  
  125.         }  
  126.         return dataset;  
  127.       }  

  128.       /** [/size]      [size=3]
  129.        * 構建單個CategorySeries,可用於生成餅圖,注意與buildMultipleCategoryDataset(構建圓環圖)相區別.
  130.        *  
  131.        * @param titles the series titles
  132.        * @param values the values
  133.        * @return the category series
  134.        */  
  135.       protected CategorySeries buildCategoryDataset(String title, double[] values) {  
  136.         CategorySeries series = new CategorySeries(title);  
  137.         int k = 0;  
  138.         for (double value : values) {  
  139.           series.add("Project " + ++k, value);  
  140.         }  

  141.         return series;  [/size]      [size=3]
  142.       }  

  143.       /** [/size]      [size=3]
  144.        * 構建MultipleCategorySeries,可用於構建圓環圖(每個環是一個序列)
  145.        *  
  146.        * @param titles the series titles
  147.        * @param values the values
  148.        * @return the category series
  149.        */  
  150.       protected MultipleCategorySeries buildMultipleCategoryDataset(String title,  
  151.           List<String[]> titles, List<double[]> values) {  
  152.         MultipleCategorySeries series = new MultipleCategorySeries(title);  
  153.         int k = 0;  
  154.         for (double[] value : values) {  
  155.           series.add(2007 + k + "", titles.get(k), value);  
  156.           k++;  
  157.         }  
  158.         return series;  
  159.       }  

  160.       /** [/size]      [size=3]
  161.        * 構建DefaultRenderer.
  162.        *  
  163.        * @param colors 每個序列的顏色
  164.        * @return DefaultRenderer
  165.        */  
  166.       protected DefaultRenderer buildCategoryRenderer(int[] colors) {  
  167.         DefaultRenderer renderer = new DefaultRenderer();  
  168.         renderer.setLabelsTextSize(15);  
  169.         renderer.setLegendTextSize(15);  
  170.         renderer.setMargins(new int[] { 20, 30, 15, 0 });  
  171.         for (int color : colors) {  
  172.           SimpleSeriesRenderer r = new SimpleSeriesRenderer();  
  173.           r.setColor(color);  
  174.           renderer.addSeriesRenderer(r);  
  175.         }  
  176.         return renderer;  
  177.       }  

  178.       /** [/size]      [size=3]
  179.        * 構建XYMultipleSeriesDataset,適用於柱狀圖.
  180.        *  
  181.        * @param titles 每中柱子序列的圖列
  182.        * @param values 柱子的高度值
  183.        * @return XYMultipleSeriesDataset
  184.        */  
  185.       protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) {  
  186.         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
  187.         int length = titles.length;  
  188.         for (int i = 0; i < length; i++) {  
  189.           CategorySeries series = new CategorySeries(titles[i]);  
  190.           double[] v = values.get(i);  
  191.           int seriesLength = v.length;  
  192.           for (int k = 0; k < seriesLength; k++) {  
  193.             series.add(v[k]);  
  194.           }  
  195.           dataset.addSeries(series.toXYSeries());  
  196.         }  
  197.         return dataset;  
  198.       }  

  199.       /** [/size]      [size=3]
  200.        * 構建XYMultipleSeriesRenderer,適用於柱狀圖.
  201.        *  
  202.        * @param colors 每個序列的顏色
  203.        * @return XYMultipleSeriesRenderer
  204.        */  
  205.       protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {  
  206.         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();  
  207.         renderer.setAxisTitleTextSize(16);  
  208.         renderer.setChartTitleTextSize(20);  
  209.         renderer.setLabelsTextSize(15);  
  210.         renderer.setLegendTextSize(15);  
  211.         int length = colors.length;  
  212.         for (int i = 0; i < length; i++) {  
  213.           SimpleSeriesRenderer r = new SimpleSeriesRenderer();  
  214.           r.setColor(colors[i]);  
  215.           renderer.addSeriesRenderer(r);  
  216.         }  
  217.         return renderer;  
  218.       }  

  219.     }  [/size]      
複製代碼

4.  其他的以*Chat結尾的類大都繼承自AbstractDemoChart這個類實現了接口IDemoChart.我們可以重點看一下execute(context)方法,分析之後發現這個方法中構建Intent的步驟大同小異,第一步構建dataset,第二步構建renderer,第三步調用ChartFactory.get***Intent()方法或ChartFactory.get***View()方法,二者的區別在於一個返回Intent,這個intent可以啓動一個特定的activity,另一個返回[url=]GraphicalView[/url],對這個[url=]GraphicalView[/url]可以靈活設置也可以僅作爲一部分顯示在任何activity上.對於ChartFactory.get***Intent()上的參數activityTitle是指設置顯示在activity上的標題.


條形圖

static android.content.Intent

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

條形圖

static android.content.Intent

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

條形圖

static [url=]GraphicalView[/url]

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

氣泡圖

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 [url=]GraphicalView[/url]

getBubbleChartView(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRendererrenderer)

組合圖

static android.content.Intent

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

組合圖

static [url=]GraphicalView[/url]

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

立方折線圖

static [url=]GraphicalView[/url]

getCubeLineChartView(android.content.Context context,XYMultipleSeriesDatasetdataset, XYMultipleSeriesRendererrenderer, float smoothness)

立方折線圖

static android.content.Intent

getCubicLineChartIntent(android.content.Context context,XYMultipleSeriesDataset dataset, XYMultipleSeriesRendererrenderer, 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[/url](android.content.Context context,[url=]CategorySeries[/url] dataset, [url=]DialRenderer renderer, java.lang.String activityTitle)

撥號盤

static [url=]GraphicalView[/url]

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

圓環圖

static android.content.Intent

[url=]getDoughnutChartIntent[/url](android.content.Context context,[url=]MultipleCategorySeries[/url] dataset, [url=]DefaultRenderer[/url] renderer, java.lang.String activityTitle)

圓環圖

static [url=]GraphicalView[/url]

[url=]getDoughnutChartView[/url](android.content.Context context,[url=]MultipleCategorySeries[/url] dataset, [url=]DefaultRenderer[/url] renderer)

圓環圖

static android.content.Intent

[url=]getLineChartIntent[/url](android.content.Context context,[url=]XYMultipleSeriesDataset[/url] dataset, [url=]XYMultipleSeriesRenderer[/url] renderer)

折線圖

static android.content.Intent

[url=]getLineChartIntent[/url](android.content.Context context,[url=]XYMultipleSeriesDataset[/url] dataset, [url=]XYMultipleSeriesRenderer[/url] renderer, java.lang.String activityTitle)

折線圖

static [url=]GraphicalView[/url]

[url=]getLineChartView[/url](android.content.Context context,[url=]XYMultipleSeriesDataset[/url] dataset, [url=]XYMultipleSeriesRenderer[/url] renderer)

餅圖

static android.content.Intent

[url=]getPieChartIntent[/url](android.content.Context context, [url=]CategorySeries[/url] dataset,[url=]DefaultRenderer[/url] renderer, java.lang.String activityTitle)

餅圖

static [url=]GraphicalView[/url]

[url=]getPieChartView[/url](android.content.Context context, [url=]CategorySeries[/url] dataset,[url=]DefaultRenderer[/url] renderer)

範圍條形圖

static android.content.Intent

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

範圍條形圖

static [url=]GraphicalView[/url]

[url=]getRangeBarChartView[/url](android.content.Context context,[url=]XYMultipleSeriesDataset[/url] dataset, [url=]XYMultipleSeriesRenderer[/url] renderer,[url=]BarChart.Type[/url] type)

散點圖

static android.content.Intent

[url=]getScatterChartIntent[/url](android.content.Context context,[url=]XYMultipleSeriesDataset[/url] dataset, [url=]XYMultipleSeriesRenderer[/url] renderer)

散點圖

static android.content.Intent

[url=]getScatterChartIntent[/url](android.content.Context context,[url=]XYMultipleSeriesDataset[/url] dataset, [url=]XYMultipleSeriesRenderer[/url] renderer, java.lang.String activityTitle)

散點圖

static [url=]GraphicalView[/url]

getScatterChartView[/url](android.content.Context context,XYMultipleSeriesDatasetdataset, 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, XYMultipleSeriesRendererrenderer, java.lang.String format, java.lang.String activityTitle)

時間圖

static [url=]GraphicalView[/url]

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章