安卓图表引擎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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开和社区支持:Go语言是开的,具有庞大的社区支持和丰富的资。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开和社区支持:Go语言是开的,具有庞大的社区支持和丰富的资。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开和社区支持:Go语言是开的,具有庞大的社区支持和丰富的资。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值