android圖表工具achartengine之ChartFactory分析

來源:互聯網
上載者:User

要充分應用AChartEngine還需要查看源碼,只有從本質上知道這些運作原理才能畫出適合自己程式的圖表

code:

package org.achartengine;import org.achartengine.chart.BarChart;import org.achartengine.chart.BubbleChart;import org.achartengine.chart.CombinedXYChart;import org.achartengine.chart.CubicLineChart;import org.achartengine.chart.DialChart;import org.achartengine.chart.DoughnutChart;import org.achartengine.chart.LineChart;import org.achartengine.chart.PieChart;import org.achartengine.chart.RangeBarChart;import org.achartengine.chart.ScatterChart;import org.achartengine.chart.TimeChart;import org.achartengine.chart.XYChart;import org.achartengine.model.CategorySeries;import org.achartengine.model.MultipleCategorySeries;import org.achartengine.model.XYMultipleSeriesDataset;import org.achartengine.renderer.DefaultRenderer;import org.achartengine.renderer.DialRenderer;import org.achartengine.renderer.XYMultipleSeriesRenderer;import android.content.Context;import android.content.Intent;public class ChartFactory//這個是AChartEngine的工廠類{  public static final String CHART = "chart";  public static final String TITLE = "title";    //---------------------以下這些是用GraphicalView顯示的圖表 需要寄託在一些Activity的布局上才能正常顯示-----------------------  public static final GraphicalView getLineChartView(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer)  {//LineChart可以畫直條圖,折線圖等    checkParameters(dataset, renderer);    XYChart chart = new LineChart(dataset, renderer);    return new GraphicalView(context, chart);  }  public static final GraphicalView getCubeLineChartView(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, float smoothness)  {//這個是組合的線性圖,可以自訂橫軸,縱軸,    checkParameters(dataset, renderer);    XYChart chart = new CubicLineChart(dataset, renderer, smoothness);    return new GraphicalView(context, chart);  }  public static final GraphicalView getScatterChartView(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer)  {//散佈圖    checkParameters(dataset, renderer);    XYChart chart = new ScatterChart(dataset, renderer);    return new GraphicalView(context, chart);  }  public static final GraphicalView getBubbleChartView(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer)  {//泡沫圖    checkParameters(dataset, renderer);    XYChart chart = new BubbleChart(dataset, renderer);    return new GraphicalView(context, chart);  }  public static final GraphicalView getTimeChartView(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, String format)  {//時間分布圖    checkParameters(dataset, renderer);    TimeChart chart = new TimeChart(dataset, renderer);    chart.setDateFormat(format);    return new GraphicalView(context, chart);  }  public static final GraphicalView getBarChartView(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, BarChart.Type type)  {//柱狀圖    checkParameters(dataset, renderer);    XYChart chart = new BarChart(dataset, renderer, type);    return new GraphicalView(context, chart);  }  public static final GraphicalView getRangeBarChartView(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, BarChart.Type type)  {//地區圖    checkParameters(dataset, renderer);    XYChart chart = new RangeBarChart(dataset, renderer, type);    return new GraphicalView(context, chart);  }  public static final GraphicalView getCombinedXYChartView(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, String[] types)  {//組合圖,可以讓柱狀圖+折線圖+曲線+泡沫圖融為一體    if ((dataset == null) || (renderer == null) || (types == null) || (dataset.getSeriesCount() != types.length))    {      throw new IllegalArgumentException("Dataset, renderer and types should be not null and the datasets series count should be equal to the types length");    }    checkParameters(dataset, renderer);    CombinedXYChart chart = new CombinedXYChart(dataset, renderer, types);    return new GraphicalView(context, chart);  }  public static final GraphicalView getPieChartView(Context context, CategorySeries dataset, DefaultRenderer renderer)  {//餅圖    checkParameters(dataset, renderer);    PieChart chart = new PieChart(dataset, renderer);    return new GraphicalView(context, chart);  }  public static final GraphicalView getDialChartView(Context context, CategorySeries dataset, DialRenderer renderer)  {//刻表圖 像汽車速度表那樣的圖    checkParameters(dataset, renderer);    DialChart chart = new DialChart(dataset, renderer);    return new GraphicalView(context, chart);  }  public static final GraphicalView getDoughnutChartView(Context context, MultipleCategorySeries dataset, DefaultRenderer renderer)  {//圓圈圖    checkParameters(dataset, renderer);    DoughnutChart chart = new DoughnutChart(dataset, renderer);    return new GraphicalView(context, chart);  }  //---------------------以下這些是用Intent(意圖)顯示的圖表 可以不用寄託在Activity中也能正常顯示-----------------------  public static final Intent getLineChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer)  {    return getLineChartIntent(context, dataset, renderer, "");  }  public static final Intent getCubicLineChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, float smoothness)  {    return getCubicLineChartIntent(context, dataset, renderer, smoothness, "");  }  public static final Intent getScatterChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer)  {    return getScatterChartIntent(context, dataset, renderer, "");  }  public static final Intent getBubbleChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer)  {    return getBubbleChartIntent(context, dataset, renderer, "");  }  public static final Intent getTimeChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, String format)  {    return getTimeChartIntent(context, dataset, renderer, format, "");  }  public static final Intent getBarChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, BarChart.Type type)  {    return getBarChartIntent(context, dataset, renderer, type, "");  }  public static final Intent getLineChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    XYChart chart = new LineChart(dataset, renderer);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getCubicLineChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, float smoothness, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    XYChart chart = new CubicLineChart(dataset, renderer, smoothness);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getScatterChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    XYChart chart = new ScatterChart(dataset, renderer);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getBubbleChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    XYChart chart = new BubbleChart(dataset, renderer);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getTimeChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, String format, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    TimeChart chart = new TimeChart(dataset, renderer);    chart.setDateFormat(format);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getBarChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, BarChart.Type type, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    BarChart chart = new BarChart(dataset, renderer, type);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getRangeBarChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, BarChart.Type type, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    RangeBarChart chart = new RangeBarChart(dataset, renderer, type);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getCombinedXYChartIntent(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, String[] types, String activityTitle)  {    if ((dataset == null) || (renderer == null) || (types == null) || (dataset.getSeriesCount() != types.length))    {      throw new IllegalArgumentException("Datasets, renderers and types should be not null and the datasets series count should be equal to the types length");    }    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    CombinedXYChart chart = new CombinedXYChart(dataset, renderer, types);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getPieChartIntent(Context context, CategorySeries dataset, DefaultRenderer renderer, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    PieChart chart = new PieChart(dataset, renderer);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getDoughnutChartIntent(Context context, MultipleCategorySeries dataset, DefaultRenderer renderer, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    DoughnutChart chart = new DoughnutChart(dataset, renderer);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  public static final Intent getDialChartIntent(Context context, CategorySeries dataset, DialRenderer renderer, String activityTitle)  {    checkParameters(dataset, renderer);    Intent intent = new Intent(context, GraphicalActivity.class);    DialChart chart = new DialChart(dataset, renderer);    intent.putExtra("chart", chart);    intent.putExtra("title", activityTitle);    return intent;  }  private static void checkParameters(XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer)  {    if ((dataset == null) || (renderer == null) || (dataset.getSeriesCount() != renderer.getSeriesRendererCount()))    {      throw new IllegalArgumentException("Dataset and renderer should be not null and should have the same number of series");    }  }  private static void checkParameters(CategorySeries dataset, DefaultRenderer renderer)  {    if ((dataset == null) || (renderer == null) || (dataset.getItemCount() != renderer.getSeriesRendererCount()))    {      throw new IllegalArgumentException("Dataset and renderer should be not null and the dataset number of items should be equal to the number of series renderers");    }  }  private static void checkParameters(MultipleCategorySeries dataset, DefaultRenderer renderer)  {    if ((dataset == null) || (renderer == null) || (!checkMultipleSeriesItems(dataset, renderer.getSeriesRendererCount())))    {      throw new IllegalArgumentException("Titles and values should be not null and the dataset number of items should be equal to the number of series renderers");    }  }  private static boolean checkMultipleSeriesItems(MultipleCategorySeries dataset, int value)  {    int count = dataset.getCategoriesCount();    boolean equal = true;    for (int k = 0; (k < count) && (equal); k++) {      equal = dataset.getValues(k).length == dataset.getTitles(k).length;    }    return equal;  }}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.