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

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. package org.achartengine.chartdemo.demo.chart;
  2. import java.util.Date;
  3. import java.util.List;
  4. import org.achartengine.chart.PointStyle;
  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 {
  15. /**
  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中添加序列.
  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. /**
  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) {
  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. //以下代码设置没个序列的颜色.
  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. /**
  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. /**
  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. /**
  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;
  142. }
  143. /**
  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. /**
  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. /**
  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. /**
  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. }

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

安卓图表引擎AChartEngine(二) - 示例源码概述和分析的更多相关文章

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

    折线图: package org.achartengine.chartdemo.demo.chart; import java.util.ArrayList; import java.util.Lis ...

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

    包结构: org.achartengine: org.achartengine.model: org.achartengine.renderer: org.achartengine.tools: 安卓 ...

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

    前面几篇博客中都是调用ChartFactory.get***Intent()方法,本节讲的内容调用ChartFactory.get***View()方法,这个方法调用的结果可以嵌入到任何一个Activ ...

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

    AChartEngine 是一个安卓系统上制作图表的框架,目前它支持如下的图表类型: line chart (折线图) area chart (面积图:分区图,对比图) scatter chart ( ...

  5. 【开源项目10】安卓图表引擎AChartEngine

    安卓图表引擎AChartEngine(一) - 简介 http://blog.csdn.net/lk_blog/article/details/7645509 安卓图表引擎AChartEngine(二 ...

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

    下面只讲解一个Renderer和一个DataSet,更多内容参看官方文档 DefaultRenderer: void addSeriesRenderer(int index, SimpleSeries ...

  7. 图表引擎AChartEngine 二

    这几天项目涉及到android图表绘制,网上找的Demo都是大同小异,也就如上篇博文所写的一样是基本函数的实现.可是所有能找到的Demo都和设计图不符.木有办法,Leader发话啦,万不得已的情况下不 ...

  8. Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构

    Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构 目录 Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构 0x00 摘要 0x01 Alink设计原则 0x02 A ...

  9. Alink漫谈(二十二) :源码分析之聚类评估

    Alink漫谈(二十二) :源码分析之聚类评估 目录 Alink漫谈(二十二) :源码分析之聚类评估 0x00 摘要 0x01 背景概念 1.1 什么是聚类 1.2 聚类分析的方法 1.3 聚类评估 ...

随机推荐

  1. postgres 数据库备份恢复

    postgre 数据库备份恢复命令 备份:pg_dump -U postgres -v -F c -Z 4 -f ***.backup dbname  9压缩率最狠恢复:pg_restore -U p ...

  2. js获取url传递参数,js获取url?号后面的参数

    方法一.正则表达式 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...

  3. wpf 类似TextBlock外观的Button的样式

    <Style x:Key="noborderbtnStyle" TargetType="{x:Type Button}"> <Setter P ...

  4. OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)和varying,uniform,attribute修饰范围

    OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)   所有变量和函数在使用前必须声明.变量和函数名是标识符. 没有默认类型,所有变量和函数声明必须包含一个声明类型以及可选的修饰符. ...

  5. OpenGL ES 详解纹理生成和纹理映射步骤以及函数

    通常一个纹理映射的步骤是: 创建纹理对象.就是获得一个新的纹理句柄 ID. 指定纹理.就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中. 设定过滤器.定义了ope ...

  6. PID控制学习笔记(一)

    比例控制往往会存在稳态误差(该结论适用于0型对象) 由比例度的定义和意义,比例增益Kc越大,即直线的斜率越大,则,越快达到平衡,稳态误差越小,因此在保证系统相对稳定性一定的条件下,总是希望比例增益越大 ...

  7. NSUserDefault -- synchronize 浅析

    NSUserDefault的使用比较简单:NSUserDefaults *mySettingData = [NSUserDefaults standardUserDefaults];  创建NSUse ...

  8. if __name__ == '__main__'在python中的应用

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...

  9. World Finals 1996 Uva 247 (Floyd求闭包)

    思路:用Floyd求传递闭包. 附:逗号后的空格没看到,WA了好多次…….还有就是强连通分量也可以做,但是对这个题来说太麻烦,而且不方便输出,. 代码如下: #include<iostream& ...

  10. PD生成oracle表名带引号解决方案

    使用PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号.其实加引号是PL/SQL的规范,数据库会 严格按照“”中的名称建表,如果没有“”,会按照ORAC ...