【Android 應用開發】Android 圖表繪制 achartengine 示例解析

      網友投稿 854 2025-04-04

      轉載請注明出處 :?http://blog.csdn.net/shulianghan/article/details/38420197

      一. AChartEngine 簡介

      1. 項目地址

      AChartEngine 簡介 : AChartEngine 是 Android 平臺的圖表開發庫, 能繪制 折線圖, 餅圖, 氣泡圖, 柱狀圖, 散點圖, 面積圖等統計圖表;

      最新版本 : 1.1.0 版本;

      AChartEngine 地址 :?https://code.google.com/p/achartengine/ ;

      -- 示例代碼- : https://achartengine.googlecode.com/files/achartengine-1.1.0-demo-source.zip;

      -- 參考文檔- : https://achartengine.googlecode.com/files/achartengine-1.1.0-javadocs.zip;

      -- jar包- : https://achartengine.googlecode.com/files/achartengine-1.1.0.jar;

      CSDN資源下載 :?http://download.csdn.net/detail/han1202012/7741579;

      -- Google被墻因素 : 鑒于 Google 被河蟹了, 提供 CSDN 資源下載最新的 AChartEngine-1.1.0 版本的 JAR包 文檔 和 示例程序;

      2. AChartEngine 運行機制

      AChartEngine 運行示例圖 : 每個圖表都需要一個數據集 (Dataset) 和 渲染器集合?(Renderer);

      -- 數據集 : 又由許多數據組成,

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

      -- 獲取Activity 或 組件 : 圖表工廠 (ChartFactory) 通過調用 數據集 (Dataset) 和 渲染器集合 (Renderer) 可以生成帶圖表的?GraphicalView 或者?GraphicalActivity;

      AChartEngine 相關類介紹 :

      -- ChartFactory : 圖表生成的工廠類, 通過你傳入 數據集 和 渲染器集合, 即可生成?GraphicalView 或者?GraphicalActivity;

      --?XYMultipleSeriesDataset : 數據集, 其中可以封裝圖表所需的數據;

      --?XYSeries : 屬于 圖表數據集的一部分, 每個都代表了一個數據集合 例如 折線, 一個圖表中可以有多條折線, 所有的數據放在一起就是 數據集?XYMultipleSeriesDataset ;

      --?XYMultipleSeriesRenderer : 渲染器集合, 圖表中多個曲線的渲染器;

      --?XYSeriesRenderer : 單個曲線或單元的渲染器, 一個圖表中可能有多條曲線或者柱狀圖等, 每個都需要一個渲染器, 所有的渲染器放在一起就是渲染器集合?XYMultipleSeriesRenderer;

      二. AChartEngine 主要代碼解析

      1. 曲線圖 柱狀圖 圖表數據集

      (1) 針對 x y 軸數據都是 Double 的情況

      相關類介紹 :

      --?XYMultipleSeriesDataset 類 : 該類可以封裝 曲線圖 柱狀圖 等圖表的數據集, 這些圖表的共性是值都是由 x 和 y 數值組成的, 需要分別傳入 x 軸數據 和 y 軸數據;

      --?XYSeries 類 : 圖表中有多個曲線, 該類封裝單個曲線的集合,?XYMultipleSeriesDataset 封裝了多個 XYSeries;

      需要準備的數據 :

      -- 單組數據名稱集合 : String[] titles, 單組數據名稱 每條曲線可能有一個名稱, 一個圖表可能有多個曲線, 因此這里需要一個 標題數組;

      -- x軸數據組集合 : List xValues, x 軸數據集合, 其中每個數組都是一個 曲線的x軸數據, 整個 List 集合是多個曲線的數據;

      -- y軸數據組集合 : List yValues, y 軸數據集合, 整個 List 集合是多個曲線的 y 軸數據集合;

      相關方法詳解 :

      -- 創建 XYMultipleSeriesDataset 對象 : 直接調用無參數的構造方法即可,?XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

      -- 創建 XYSeries 對象 : 該對象是單條曲線數據, 可以設置 單條曲線標題, x 軸數據數組, y 軸數據數組,?XYSeries series = new XYSeries(String titles, float scale);

      -- 為單個曲線添加數據 : 即未 XYSeries 對象添加兩個數組, 分別是 x 軸和 y 軸的數據,?series.add(xV[k], yV[k]);

      -- 將 XYSeries 對象添加到 XYMultipleSeriesDataset 對象中 :?dataset.addSeries(series);

      代碼示例 :

      /**

      * 曲線圖(數據集) : 創建曲線圖圖表數據集

      *

      * @param 賦予的標題

      * @param xValues x軸的數據

      * @param yValues y軸的數據

      * @return XY軸數據集

      */

      protected XYMultipleSeriesDataset buildDataset(String[] titles, List xValues,

      List yValues) {

      XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();/* 創建圖表數據集 */

      addXYSeries(dataset, titles, xValues, yValues, 0); /* 添加單條曲線數據到圖表數據集中 */

      return dataset;

      }

      /**

      * 曲線圖(被調用方法) : 添加 XY 軸坐標數據 到 XYMultipleSeriesDataset 數據集中

      *

      * @param dataset 最后的 XY 數據集結果, 相當與返回值在參數中

      * @param titles 要賦予的標題

      * @param xValues x軸數據集合

      * @param yValues y軸數據集合

      * @param scale 縮放

      *

      * titles 數組個數 與 xValues, yValues 個數相同

      * tittle 與 一個圖標可能有多條曲線, 每個曲線都有一個標題

      * XYSeries 是曲線圖中的 一條曲線, 其中封裝了 曲線名稱, X軸和Y軸數據

      */

      public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List xValues,

      List yValues, int scale) {

      int length = titles.length; /* 獲取標題個數 */

      for (int i = 0; i < length; i++) {

      XYSeries series = new XYSeries(titles[i], scale); /* 單條曲線數據 */

      double[] xV = xValues.get(i); /* 獲取該條曲線的x軸坐標數組 */

      double[] yV = yValues.get(i); /* 獲取該條曲線的y軸坐標數組 */

      int seriesLength = xV.length;

      for (int k = 0; k < seriesLength; k++) {

      series.add(xV[k], yV[k]); /* 將該條曲線的 x,y 軸數組存放到 單條曲線數據中 */

      }

      dataset.addSeries(series); /* 將單條曲線數據存放到 圖表數據集中 */

      }

      }

      (2) x 軸是日期 y 軸是 Double

      相關類介紹 :

      --?XYMultipleSeriesDataset : 這種 日期-值 圖, 使用的圖表數據集也是該類;

      --?TimeSeries : 這里就不同了, 單個曲線的數據中因為要封裝 Date 數組, 因此要使用該類封裝 Date[] 和 Double[] 數據;

      需要準備的數據 :

      --?String[] titles : 圖表中有多個折線, 數組中每個元素都是一個折線的標題;

      --?List xValues : List 集合中每個 Date[] 都是一條曲線的 x 軸數據;

      --?List yValues : List 集合中每個 double[] 都是一條曲線的 y 軸數據;

      相關方法介紹 :

      -- 創建單條曲線數據?TimeSeries?對象 :?TimeSeries series = new TimeSeries(titles[i]), 參數是該條曲線的標題名稱;

      -- 設置 日期 和 值數組給 TimeSeries 對象?: series.add(xV[k], yV[k]);

      -- 將 TimeSeries 對象設置給?XYMultipleSeriesDataset 對象?:?dataset.addSeries(series);

      代碼示例 :

      /**

      * 曲線圖(日期數據集) : 創建曲線圖數據集, x軸是日期, y軸是具體的數值

      *

      * @param titles 各條曲線的標題, 放在一個數組中

      * @param xValues x軸的日志值數組組成的集合

      * @param yValusey軸具體的數據值數組組成的集合

      * @return 具體的曲線圖圖表

      */

      protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List xValues,

      List yValues) {

      XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();/* 創建圖表數據集 */

      int length = titles.length; /* 獲取曲線個數, 每個曲線都有一個標題 */

      for (int i = 0; i < length; i++) {

      TimeSeries series = new TimeSeries(titles[i]); /* 帶日期的單條曲線數據 */

      Date[] xV = xValues.get(i); /* 獲取該條曲線數據的 日期數組 */

      double[] yV = yValues.get(i); /* 獲取該條曲線數據的 值數組 */

      int seriesLength = xV.length; /* 獲取該條曲線的值的個數, 即x軸點個數 */

      for (int k = 0; k < seriesLength; k++) {

      series.add(xV[k], yV[k]); /* 將日期數組 和 值數組設置給 帶日期的單條曲線數據 */

      }

      dataset.addSeries(series); /* 將單條曲線數據設置給 圖標曲線數據集 */

      }

      return dataset;

      }

      2. 曲線圖圖表渲染器

      (1) 曲線渲染

      相關類介紹 :

      --?XYMultipleSeriesRenderer : 曲線圖整體渲染器, 其中封裝了許多?XYSeriesRenderer 單曲線渲染器;

      --?XYSeriesRenderer : 單個曲線渲染器, 設置曲線的顏色 和 風格樣式;

      數據準備 :

      --?int[] colors : 顏色集合, 每種曲線都要有一個顏色值;

      --?PointStyle[] styles : 曲線樣式集合, 每條曲線都有其繪制樣式;

      XYMultipleSeriesRenderer?相關方法介紹 :

      -- 設置 xy 軸標題字體大小 :?setAxisTitleTextSize(int size);

      -- 設置表格標題大小 :?setChartTitleTextSize(int size);

      -- 設置標簽文字大小 :?setLabelsTextSize(int size);

      -- 設置說明文字大小 :?setLegendTextSize(int size);

      -- 設置點的大小:?setPointSize(int size);

      -- 添加單曲線渲染器 :?addSeriesRenderer(render);

      XYSeriesRenderer 相關方法介紹 :

      -- 創建對象 :?XYSeriesRenderer r = new XYSeriesRenderer();

      -- 設置單個曲線顏色 :?r.setColor(colors[i]);

      -- 設置單個曲線繪制風格 :?r.setPointStyle(styles[i]);

      代碼示例 :

      /**

      * 曲線圖(渲染器) : 創建曲線圖圖表渲染器

      *

      * @param 每條曲線要渲染的顏色, 把這些顏色放入數組

      * @param 每條曲線繪制點的風格

      * @return 數據渲染器集合

      */

      protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {

      XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();/* 創建曲線圖圖表渲染器 */

      setRenderer(renderer, colors, styles); /* 為曲線圖渲染器設置顏色和樣式 */

      return renderer;

      }

      /**

      * 曲線圖(渲染器 - 被調用方法) : 設置坐標軸渲染器

      *

      * @param renderer 設置的渲染器集合, 這個參數相當與返回值, 設置渲染器結果保存在這個參數中

      * @param colors 要渲染的顏色集合

      * @param styles 要渲染的樣式集合

      */

      protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {

      renderer.setAxisTitleTextSize(16); /* 設置XY軸標題字體大小 */

      renderer.setChartTitleTextSize(20); /* 設置表格標題文字大小 */

      renderer.setLabelsTextSize(15); /* 設置標簽文字大小 */

      renderer.setLegendTextSize(15); /* 設置說明文字大小 */

      renderer.setPointSize(5f); /* 設置點的大小 */

      renderer.setMargins(new int[] { 20, 30, 15, 20 }); /* 設置 margin, 單位像素 */

      int length = colors.length; /* 獲取渲染器的個數, 即有多少條曲線 */

      for (int i = 0; i < length; i++) {

      XYSeriesRenderer r = new XYSeriesRenderer(); /* 單個曲線的渲染器 */

      r.setColor(colors[i]); /* 為單個曲線渲染器設置曲線顏色 */

      r.setPointStyle(styles[i]); /* 為單個曲線渲染器設置曲線風格 */

      renderer.addSeriesRenderer(r); /* 將單個曲線渲染器設置到渲染器集合中 */

      }

      }

      (2) 坐標軸設置

      渲染器參數設置 : 坐標軸渲染主要是對?XYMultipleSeriesRenderer 進行一系列的參數設置, 都是調用的 XYMultipleSeriesRenderer 對象中的方法;

      -- 設置曲線標題 :?setChartTitle(String tittle);

      -- 設置 x 軸標題 :?setXTitle(String tittle);

      -- 設置 y 軸標題 :?setYTitle(String tittle);

      -- 設置 x 軸最小值 :?setXAxisMin(double);

      -- 設置 x 軸最大值 :?setXAxisMax(double);

      -- 設置 y 軸最小值 :?setYAxisMin(double);

      -- 設置 y 軸最大值 :?setYAxisMax(double);

      -- 設置坐標軸顏色 :?setAxesColor();

      -- 設置標簽顏色 :?setLabelsColor();

      代碼示例 :

      /**

      * 坐標軸(渲染器) : 對曲線圖渲染器進行配置, 主要配置坐標軸

      *

      * @param renderer 要進行配置的渲染器

      * @param title 圖表的名稱

      * @param xTitle x軸坐標的名稱

      * @param yTitle y軸坐標的名稱

      * @param xMin x軸最小值

      * @param xMax x軸最大值

      * @param yMin y軸最小值

      * @param yMax y軸最大值

      * @param axesColor 坐標軸的顏色

      * @param labelsColor 標簽的顏色

      */

      protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,

      String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor,

      int labelsColor) {

      renderer.setChartTitle(title); /* 設置曲線圖標題 */

      renderer.setXTitle(xTitle); /* 設置x軸標題 */

      renderer.setYTitle(yTitle); /* 設置y軸標題 */

      renderer.setXAxisMin(xMin); /* 設置x軸最小值 */

      renderer.setXAxisMax(xMax); /* 設置x軸最大值 */

      renderer.setYAxisMin(yMin); /* 設置y軸最小值 */

      renderer.setYAxisMax(yMax); /* 設置y軸最大值 */

      renderer.setAxesColor(axesColor); /* 設置坐標軸顏色 */

      renderer.setLabelsColor(labelsColor); /* 設置標簽顏色 */

      }

      3. 餅圖數據集

      (1) 單個餅圖數據集

      相關類介紹 :

      --?CategorySeries : 餅圖數據集;

      相關方法介紹 :

      -- 添加數據元素 :?CategorySeries.add(String category, double value), 參數分別是 名稱 和 值;

      代碼示例 :

      /**

      * 餅圖(單數據) : 創建只包含一個餅圖的圖表數據集

      *

      * @param titles 餅圖的標題

      * @param values 餅圖的值組成的數組

      * @return 返回餅圖

      */

      protected CategorySeries buildCategoryDataset(String title, double[] values) {

      CategorySeries series = new CategorySeries(title); /* 創建單個餅狀圖數據, 傳入餅狀圖標題 */

      int k = 0;

      for (double value : values) {

      series.add("Project " + ++k, value); /* 鍵值對, 鍵是餅圖元素的標題, 值是大小 */

      }

      return series;

      }

      (2) 多餅圖圖表數據集

      相關類介紹 :

      --?MultipleCategorySeries : 多餅圖圖表數據集, 該類對象與單餅圖圖表數據集 CategorySeries?對象沒有包含關系;

      準備數據 :

      -- 餅圖每個元素名稱 :?List titles, 其中集合中的數組就是一個餅圖每個元素的集合;

      -- 餅圖每個元素的大小 : List values, 其中的數組就是一個餅圖每個元素的大小;

      相關方法介紹 :

      -- 創建多餅圖數據集 : MultipleCategorySeries series = new MultipleCategorySeries(title), 傳入圖表的名稱;

      -- 添加一個餅圖的數據 :?series.add(tittle, titles.get(k), value), 第一個參數是單個餅圖名稱, 第二個參數是餅圖元素名稱字符串數組, 第三個是餅圖元素大小 double[] 數組;

      示例代碼 :

      /**

      * 餅圖(數據集) : 創建包含多個餅圖的圖表數據集

      【Android 應用開發】Android 圖表繪制 achartengine 示例解析

      * 多個餅圖通過大小環嵌套形式展示

      *

      * @param titles 圖表的標題

      * @param tittles 圖表中 每個餅圖的標題 組成的數組

      * @param values 餅圖的值組成的數組 組成的集合

      * @return 返回餅圖圖表

      */

      protected MultipleCategorySeries buildMultipleCategoryDataset(String title,

      List titles, List values) {

      MultipleCategorySeries series = new MultipleCategorySeries(title); /* 多個餅圖組成的圖表 */

      int k = 0;

      for (double[] value : values) {

      /*

      * 第一個參數是 餅圖的名稱

      * 第二個參數是 餅圖的元素名稱組成的數組

      * 第三個參數是 餅圖的元素對應的數值組成的數組SimpleSeriesRenderer

      *

      * 注意 餅圖元素名稱數組 與 餅圖值數組 個數是相同的, 并且是對應的

      */

      series.add(2007 + k + "", titles.get(k), value);

      k++;

      }

      return series;

      }

      4. 餅圖渲染器

      相關類介紹 :

      --?DefaultRenderer : 餅圖渲染器, 單餅圖 和 多餅圖使用的渲染器都是同一個;

      --?DefaultRenderer : 餅圖單個元素渲染器, 一個餅圖有多個該渲染器渲染, 整個圖表有多組該渲染器;

      數據準備 :

      -- 餅圖元素的顏色 :?int[] colors, 將餅圖中所有的顏色放在一個數組中, 每個元素都有一個顏色;

      DefaultRenderer 類方法介紹 :

      -- 構造方法 :?DefaultRenderer renderer = new DefaultRenderer();

      -- 設置標簽文字大小 :?setLabelsTextSize(int size);

      -- 設置說明文字大小 :?setLegendTextSize(int size);

      -- 設置邊距 :?setMargins(new int[] { 20, 30, 15, 0 });

      -- 添加SimpleSeriesRenderer對象到該渲染器集合?:?addSeriesRenderer(r);

      SimpleSeriesRenderer 方法 :

      -- 構造函數 :?SimpleSeriesRenderer r = new SimpleSeriesRenderer();

      -- 設置顏色 :?setColor(color);

      示例代碼 :

      /**

      * 餅圖(渲染器) : 使用現有顏色創建餅圖渲染器

      *

      * @param colors 顏色數組

      * @return 返回餅圖渲染器

      */

      protected DefaultRenderer buildCategoryRenderer(int[] colors) {

      DefaultRenderer renderer = new DefaultRenderer(); /* 默認的餅圖圖表渲染器 */

      renderer.setLabelsTextSize(15); /* 設置標簽文字大小 */

      renderer.setLegendTextSize(15); /* 設置說明文字大小 */

      renderer.setMargins(new int[] { 20, 30, 15, 0 }); /* 設置邊距 */

      for (int color : colors) {

      SimpleSeriesRenderer r = new SimpleSeriesRenderer(); /* 餅狀圖中單個數據的顏色渲染器 */

      r.setColor(color);

      renderer.addSeriesRenderer(r); /* 將單個元素渲染器設置到餅圖圖表渲染器中 */

      }

      return renderer;

      }

      5. 柱狀圖數據集

      相關類介紹 :

      --?XYMultipleSeriesDataset : 封裝柱狀圖的數據, 其中可能有多個柱狀圖, 每個都封裝了若干個?CategorySeries 單個數據集對象;

      --?CategorySeries : 柱狀圖圖表中單個柱狀圖的數據, 可以被封裝入?XYMultipleSeriesDataset 數據集中;

      數據準備 :

      -- 柱狀圖標題 :?String[] titles, 由于一個柱狀圖圖表中可能有多個柱狀圖, 因此需要一個字符串數組存放這些標題;

      -- 柱狀圖值 :?List values, 集合中的每個數組都代表了一個柱狀圖的值;

      CategorySeries?方法介紹 :

      -- 構造函數 :?CategorySeries series = new CategorySeries(titles[i]), 傳入的參數是柱狀圖的值;

      -- 設置值大小 :?series.add(double), 具體的值需要一個一個去設定;

      -- 轉換類型 :?series.toXYSeries(), 只有轉換成 XYSeries 對象, 才能加入到?XYMultipleSeriesDataset 對象中;

      示例代碼 :

      /**

      * 柱狀圖(數據集) : 使用現有的數據, 創建一個柱狀圖數據集

      *

      * @param titles 柱狀圖名稱數組

      * @param values 每個柱狀圖中具體的多個值組成的數組 組成的 集合

      * @return the XY multiple bar dataset

      */

      protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List values) {

      XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); /* 創建 XYMultipleSeriesDataset對象, 圖表的總數據集 */

      int length = titles.length; /* 獲取圖表中柱狀圖個數 */

      for (int i = 0; i < length; i++) {

      CategorySeries series = new CategorySeries(titles[i]); /* 創建一個 CategorySeries對象, 單個柱狀圖數據 */

      double[] v = values.get(i); /* 獲取本柱狀圖數值數組 */

      int seriesLength = v.length; /* 獲取單個柱狀圖值的個數 */

      for (int k = 0; k < seriesLength; k++) {

      series.add(v[k]); /* 將具體的值設置給 CategorySeries對象, 單個柱狀圖數據 */

      }

      dataset.addSeries(series.toXYSeries()); /* 將單個柱狀圖數據 CategorySeries對象 設置給 圖表數據集 XYMultipleSeriesDataset對象 */

      }

      return dataset;

      }

      6. 柱狀圖渲染器

      相關類介紹 :

      --?XYMultipleSeriesRenderer : 柱狀圖渲染器集合, 與曲線圖的渲染器是一樣的, 其中封裝了很多?SimpleSeriesRenderer 對象;

      --?SimpleSeriesRenderer : 柱狀圖中的單個柱狀圖渲染器, 可以封裝到?XYMultipleSeriesRenderer 對象中;

      準備數據 :

      -- 柱狀圖顏色 :?int[] colors, 一個柱狀圖的圖表中含有若干個柱狀圖, 每個柱狀圖都設定一個顏色;

      代碼示例 :

      /**

      * 柱狀圖(渲染器) : 創建柱狀圖渲染器

      *

      * @param colors 柱狀圖的顏色數組

      * @return 返回柱狀圖渲染器colors

      */

      protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {

      XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); /* 創建圖表渲染器 */

      renderer.setAxisTitleTextSize(16); /* 設置坐標軸標題字體大小 */

      renderer.setChartTitleTextSize(20); /* 設置圖表標題字體大小 */

      renderer.setLabelsTextSize(15); /* 設置標簽字體大小 */

      renderer.setLegendTextSize(15); /* 設置說明文字字體大小 */

      int length = colors.length; /* 獲取圖表中柱狀圖個數 */

      for (int i = 0; i < length; i++) {

      SimpleSeriesRenderer r = new SimpleSeriesRenderer(); /* 單個柱狀圖渲染器 */

      r.setColor(colors[i]); /* 為單個柱狀圖渲染器設置顏色 */

      renderer.addSeriesRenderer(r); /* 將單個柱狀圖渲染器設置給圖表渲染器 */

      }

      return renderer;

      }

      三. 銷售額對比圖(折線圖 面積圖)示例

      需求分析 : 給出 2007 年和 2008 年銷售額, 將銷售額繪制到折線圖中, 并將它們的差繪制到面積圖中;

      package org.achartengine.chartdemo.demo.chart;

      import java.util.ArrayList;

      import java.util.List;

      import org.achartengine.ChartFactory;

      import org.achartengine.GraphicalView;

      import org.achartengine.chart.PointStyle;

      import org.achartengine.renderer.XYMultipleSeriesRenderer;

      import org.achartengine.renderer.XYSeriesRenderer;

      import org.achartengine.renderer.XYSeriesRenderer.FillOutsideLine;

      import android.content.Context;

      import android.content.Intent;

      import android.graphics.Color;

      import android.graphics.Typeface;

      /**

      * 銷售額對比圖表

      */

      public class SalesComparisonChart extends AbstractDemoChart {

      /**

      * 獲取圖表名稱

      *

      * @return 圖表名稱

      */

      public String getName() {

      return "銷售額對比";

      }

      /**

      * 獲取圖表的描述信息

      *

      * @return 返回圖表的詳細信息

      */

      public String getDesc() {

      return "2年內的月度銷售額發展 (插入了 折線圖 和 面積圖)";

      }

      /**

      * 獲取圖表

      *

      * @param context 上下文對象

      * @return the built intent

      */

      public Intent execute(Context context) {

      String[] titles = new String[] { "2008 年銷售額", "2007 年銷售額",

      "2008年銷售額與2007年對比" };

      /* 初始化數據集 */

      List values = new ArrayList();

      /* 2008年銷售額 */

      values.add(new double[] { 14230, 12300, 14240, 15244, 14900, 12200, 11030, 12000, 12500, 15500,

      14600, 15000 });

      /* 2007年銷售額 */

      values.add(new double[] { 10230, 10900, 11240, 12540, 13500, 14200, 12530, 11200, 10500, 12500,

      11600, 13500 });

      /* 計算出兩年銷售額的對比差 2008年 減去 2007年 */

      int length = values.get(0).length;

      double[] diff = new double[length];

      for (int i = 0; i < length; i++) {

      diff[i] = values.get(0)[i] - values.get(1)[i];

      }

      values.add(diff);

      /* 第一條線 藍色 08年銷售額, 第二條線 藍綠色 07年銷售額, 第三個面積圖 綠色 兩年銷售額對比 */

      int[] colors = new int[] { Color.BLUE, Color.CYAN, Color.GREEN };

      PointStyle[] styles = new PointStyle[] { PointStyle.POINT, PointStyle.POINT, PointStyle.POINT };

      /* 創建圖表渲染器 */

      XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);

      setChartSettings(renderer, /* 渲染器 */

      "兩年內的月度銷售額", /* 圖表標題 */

      "月份", /* x軸標題 */

      "銷售單位", /* y軸標題 */

      0.75, /* x軸最小值 */

      12.25, /* x軸最大值 */

      -5000, /* y軸最小值 */

      19000, /* y軸最大值 */

      Color.GRAY, /* 坐標軸顏色 */

      Color.LTGRAY); /* 標簽顏色 標簽即 圖表標題 xy軸標題 */

      renderer.setXLabels(12); /* 設置 x 軸刻度個數 */

      renderer.setYLabels(10); /* 設置 y 軸刻度個數 */

      renderer.setChartTitleTextSize(20); /* 設置表格標題字體大小 */

      renderer.setTextTypeface("sans_serif", Typeface.BOLD); /* 設置字體 */

      renderer.setLabelsTextSize(14f); /* */

      renderer.setAxisTitleTextSize(15);

      renderer.setLegendTextSize(15);

      length = renderer.getSeriesRendererCount();

      for (int i = 0; i < length; i++) {

      /* 獲取具體的 渲染器 */

      XYSeriesRenderer seriesRenderer = (XYSeriesRenderer) renderer.getSeriesRendererAt(i);

      if (i == length - 1) {

      /* 單獨對面積圖渲染器進行設置 */

      FillOutsideLine fill = new FillOutsideLine(FillOutsideLine.Type.BOUNDS_ALL);

      fill.setColor(Color.GREEN);

      seriesRenderer.addFillOutsideLine(fill);

      }

      /* 設置折線圖渲染器 */

      seriesRenderer.setLineWidth(2.5f);

      seriesRenderer.setDisplayChartValues(true);

      seriesRenderer.setChartValuesTextSize(10f);

      }

      /* */

      GraphicalView view = ChartFactory.getCubeLineChartView(context, buildBarDataset(titles, values), renderer, 0.5f);

      return ChartFactory.getCubicLineChartIntent(context, buildBarDataset(titles, values), renderer,

      0.5f);

      }

      }

      執行效果 :

      轉載請注明出處?:?http://blog.csdn.net/shulianghan/article/details/38420197

      Android 渲染

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:關于如何在idea中設置文檔注釋模板
      下一篇:期末考試來臨,WPS在線模板助你臨陣磨槍
      相關文章
      亚洲av不卡一区二区三区| 久久精品7亚洲午夜a| 在线观看亚洲网站| 精品亚洲一区二区三区在线观看 | 久久久久亚洲精品影视| 中文字幕亚洲不卡在线亚瑟| 亚洲精品成人a在线观看| 亚洲黄色三级网站| 亚洲国产精品第一区二区三区| 久久精品国产亚洲AV未满十八| 亚洲精品午夜视频| 亚洲午夜久久久久久久久电影网 | 亚洲日本乱码在线观看| 亚洲中文字幕在线第六区| 亚洲线精品一区二区三区影音先锋 | 亚洲国产精品激情在线观看| 亚洲成A人片77777国产| 亚洲va成无码人在线观看| 亚洲国产精品无码专区在线观看 | 久久久亚洲欧洲日产国码农村| 亚洲av午夜福利精品一区人妖| 亚洲国产精品日韩| 国产亚洲精品看片在线观看| 亚洲欧洲国产综合AV无码久久| 亚洲尹人香蕉网在线视颅| 日韩一卡2卡3卡4卡新区亚洲| 亚洲一区二区三区影院| 久久精品国产亚洲av四虎| 亚洲首页在线观看| 国产成人亚洲精品| 亚洲综合激情六月婷婷在线观看| 亚洲欧洲国产综合| 亚洲va久久久噜噜噜久久男同| 亚洲国语精品自产拍在线观看 | 亚洲中文字幕日本无线码| 4480yy私人影院亚洲| 亚洲人成伊人成综合网久久| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 亚洲综合激情六月婷婷在线观看| 亚洲一级黄色大片| 亚洲av永久无码|