首先看一下示例中類之間的關係:
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:
- [size=3]package org.achartengine.chartdemo.demo.chart;
- import java.util.Date; [/size] [size=3]
- import java.util.List;
- import org.achartengine.chart.PointStyle; [/size] [size=3]
- import org.achartengine.model.CategorySeries;
- import org.achartengine.model.MultipleCategorySeries;
- import org.achartengine.model.TimeSeries;
- import org.achartengine.model.XYMultipleSeriesDataset;
- import org.achartengine.model.XYSeries;
- import org.achartengine.renderer.DefaultRenderer;
- import org.achartengine.renderer.SimpleSeriesRenderer;
- import org.achartengine.renderer.XYMultipleSeriesRenderer;
- import org.achartengine.renderer.XYSeriesRenderer;
- public abstract class AbstractDemoChart implements IDemoChart { [/size] [size=3]
- /** [/size] [size=3]
- * 構建 XYMultipleSeriesDataset.
- *
- * @param titles 每個序列的圖例
- * @param xValues X軸的座標
- * @param yValues Y軸的座標
- * @return XYMultipleSeriesDataset
- */
- protected XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues,
- List<double[]> yValues) {
- XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
- addXYSeries(dataset, titles, xValues, yValues, 0);
- return dataset;
- }
- //向DataSet中添加序列. [/size] [size=3]
- public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<double[]> xValues,
- List<double[]> yValues, int scale) {
- int length = titles.length;
- for (int i = 0; i < length; i++) {
- XYSeries series = new XYSeries(titles[i], scale); //這裏注意與TimeSeries區別.
- double[] xV = xValues.get(i);
- double[] yV = yValues.get(i);
- int seriesLength = xV.length;
- for (int k = 0; k < seriesLength; k++) {
- series.add(xV[k], yV[k]);
- }
- dataset.addSeries(series);
- }
- }
- /** [/size] [size=3]
- * 構建XYMultipleSeriesRenderer.
- *
- * @param colors 每個序列的顏色
- * @param styles 每個序列點的類型(可設置三角,圓點,菱形,方塊等多種)
- * @return XYMultipleSeriesRenderer
- */
- protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {
- XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
- setRenderer(renderer, colors, styles);
- return renderer;
- }
- protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) { [/size] [size=3]
- //整個圖表屬性設置
- //-->start
- renderer.setAxisTitleTextSize(16);//設置軸標題文字的大小
- renderer.setChartTitleTextSize(40);//設置整個圖表標題文字的大小
- renderer.setLabelsTextSize(15);//設置軸刻度文字的大小
- renderer.setLegendTextSize(15);//設置圖例文字大小
- renderer.setPointSize(5f);//設置點的大小(圖上顯示的點的大小和圖例中點的大小都會被設置)
- renderer.setMargins(new int[] { 20, 30, 15, 20 });//設置圖表的外邊框(上/左/下/右)
- //-->end
- //以下代碼設置沒個序列的顏色. [/size] [size=3]
- //-->start
- 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);
- }
- //-->end
- }
- /** [/size] [size=3]
- * 設置renderer的一些屬性.
- *
- * @param renderer 要設置的renderer
- * @param title 圖表標題
- * @param xTitle X軸標題
- * @param yTitle Y軸標題
- * @param xMin X軸最小值
- * @param xMax X軸最大值
- * @param yMin Y軸最小值
- * @param yMax Y軸最大值
- * @param axesColor X軸顏色
- * @param labelsColor Y軸顏色
- */
- 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);
- renderer.setYTitle(yTitle);
- renderer.setXAxisMin(xMin);
- renderer.setXAxisMax(xMax);
- renderer.setYAxisMin(yMin);
- renderer.setYAxisMax(yMax);
- renderer.setAxesColor(axesColor);
- renderer.setLabelsColor(labelsColor);
- }
- /** [/size] [size=3]
- * 構建和時間有關的XYMultipleSeriesDataset,這個方法與buildDataset在參數上區別是需要List<Date[]>作參數.
- *
- * @param titles 序列圖例
- * @param xValues X軸值
- * @param yValues Y軸值
- * @return XYMultipleSeriesDataset
- */
- protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List<Date[]> xValues,
- List<double[]> yValues) {
- XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
- int length = titles.length;
- for (int i = 0; i < length; i++) {
- TimeSeries series = new TimeSeries(titles[i]);//構建時間序列TimeSeries,
- Date[] xV = xValues.get(i);
- double[] yV = yValues.get(i);
- int seriesLength = xV.length;
- for (int k = 0; k < seriesLength; k++) {
- series.add(xV[k], yV[k]);
- }
- dataset.addSeries(series);
- }
- return dataset;
- }
- /** [/size] [size=3]
- * 構建單個CategorySeries,可用於生成餅圖,注意與buildMultipleCategoryDataset(構建圓環圖)相區別.
- *
- * @param titles the series titles
- * @param values the values
- * @return the category series
- */
- 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; [/size] [size=3]
- }
- /** [/size] [size=3]
- * 構建MultipleCategorySeries,可用於構建圓環圖(每個環是一個序列)
- *
- * @param titles the series titles
- * @param values the values
- * @return the category series
- */
- protected MultipleCategorySeries buildMultipleCategoryDataset(String title,
- List<String[]> titles, List<double[]> values) {
- MultipleCategorySeries series = new MultipleCategorySeries(title);
- int k = 0;
- for (double[] value : values) {
- series.add(2007 + k + "", titles.get(k), value);
- k++;
- }
- return series;
- }
- /** [/size] [size=3]
- * 構建DefaultRenderer.
- *
- * @param colors 每個序列的顏色
- * @return DefaultRenderer
- */
- 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;
- }
- /** [/size] [size=3]
- * 構建XYMultipleSeriesDataset,適用於柱狀圖.
- *
- * @param titles 每中柱子序列的圖列
- * @param values 柱子的高度值
- * @return XYMultipleSeriesDataset
- */
- protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) {
- XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
- int length = titles.length;
- for (int i = 0; i < length; i++) {
- CategorySeries series = new CategorySeries(titles[i]);
- double[] v = values.get(i);
- int seriesLength = v.length;
- for (int k = 0; k < seriesLength; k++) {
- series.add(v[k]);
- }
- dataset.addSeries(series.toXYSeries());
- }
- return dataset;
- }
- /** [/size] [size=3]
- * 構建XYMultipleSeriesRenderer,適用於柱狀圖.
- *
- * @param colors 每個序列的顏色
- * @return XYMultipleSeriesRenderer
- */
- 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;
- }
- } [/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)
|
|