[Android]Android 如何繪製圖表

 在日常的統計中,經常要用圖表來給用戶恰當的數據體驗,比如用餅狀圖,柱型圖等。在傳統的web中,有比較多的開源的這方面的解決方案。本文將簡單介紹如何在Android中,如何使用開源工具庫來展示圖表。

  在Android中,有三種解決方案,分別是:

  1) 使用google 圖表 api
  2) 使用Achartengine庫
  3) 使用chartdroid庫

  下面分別進行介紹:

  使用google 圖表api
  第一種方法是使用google的圖表API。這個API特別適合去生成餅狀圖。
  其中cht=p3表示生成的是一個餅狀圖;chd=t:30,60,10表示要生成三個部分的數據,分別是30,60,10,當然也可以其他更復雜的數據形式。
  chs=250*100表示的是圖型的大小(寬度*高度);chl=cars|bikes|trucks指出了這三部分數據內容的文字標籤,即實際上顯示在圖表上的。
  使用方法很簡單,只需要在oncreate事件中如下調用即可:

java代碼:
  1. @Override
  2. public void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. WebView googleChartView = new WebView(this);
  5. setContentView(googleChartView);
  6. String mUrl = "http://chart.apis.google.com/chart?cht=p3& chd=t:30,60,10&chs=250x100&chl=cars|bikes|trucks";
  7. googleChartView.loadUrl(mUrl);
  8. }

  因爲要連接網絡,所以要在配置文件中允許使用網絡,在AndroidManifest.xml中如下配置:
  最後效果如下圖:


 

       2) 使用Achartengine庫


 

  第二種解決方案是使用Achartengine庫,將其JAR下載後,放到工程的lib包庫中,


 

java代碼:

  1. public class AChartExample {
  2. public Intent execute(Context context) {

  3. int[] colors = new int[] { Color.RED, Color.YELLOW, Color.BLUE };
  4. DefaultRenderer renderer = buildCategoryRenderer(colors);
  5. CategorySeries categorySeries = new CategorySeries("Vehicles Chart");
  6. categorySeries.add("cars ", 30);
  7. categorySeries.add("trucks", 20);
  8. categorySeries.add("bikes ", 60);
  9. return ChartFactory.getPieChartIntent(context, categorySeries, renderer);
  10. }

  11. protected DefaultRenderer buildCategoryRenderer(int[] colors) {
  12. DefaultRenderer renderer = new DefaultRenderer();
  13. for (int color : colors) {
  14. SimpleSeriesRenderer r = new SimpleSeriesRenderer();
  15. r.setColor(color);
  16. renderer.addSeriesRenderer(r);
  17. }
  18. return renderer;
  19. }

  20. }

  在上面的代碼中,首先將初始化了colors數組,這裏指定了餅圖的三種顏色,然後在buildCategoryRenderer方法中,使用 SimpleSeriesRenderer類實例來進行初始化,分別設置了餅圖要顯示的系列區域的顏色。而我們將要顯示的數據及標籤內容都放到categorySeries中進行顯示。最後調用ChartFactory的getPieChartIntent方法,傳入categorySeries和renderer即可。

       在我們的主類中,進行如下調用:
  Intent achartIntent = new AChartExample().execute(this);
  startActivity(achartIntent);

  最後生成的效果如下圖:


 

       3) 使用Chartdroid

  第三種方法是使用chartdroid,要注意的是,如果使用這種方法的話,下載並將其APK包進行安裝。

  要使用Chartdroid,必須要使用content provider,我們編寫代碼如下:


 

java代碼:

  1. public class ChartDroidDataProvider extends ContentProvider {

  2. static final String AUTHORITY = "com.xyz.contentprovider.chardroid";

  3. @Override
  4. public String getType(Uri uri) {
  5. return "vnd.android.cursor.dir/vnd.com.googlecode.chartdroid.graphable";
  6. }

  7. public static final Uri PROVIDER_URI = new Uri.Builder().scheme(

  8. ContentResolver.SCHEME_CONTENT).authority(AUTHORITY).build();

  9. @Override
  10. public Cursor query(Uri uri, String[] projection, String selection,
  11. String[] selectionArgs, String sortOrder) {

  12. //獲得實際數據
  13. MatrixCursor c = new MatrixCursor(new String[] { BaseColumns._ID,
  14. "COLUMN_AXIS_INDEX", "COLUMN_SERIES_INDEX",
  15. "COLUMN_DATUM_VALUE", "COLUMN_DATUM_LABEL" });
  16. c.newRow().add(1).add(0).add(1).add(30).add(null);
  17. c.newRow().add(2).add(0).add(1).add(10).add(null);
  18. c.newRow().add(3).add(0).add(1).add(60).add(null);
  19. return c;
  20. }

  21. }


        在上面的代碼中,我們使用了MatrixCursor生成了相關的數據:30,10,60。關於ChartDroid的詳細 ContentProvider信息,接下來,我們看使用的代碼,如下:

java代碼:

  1. Intent chartDroidIntent = new Intent(Intent.ACTION_VIEW,ChartDroidDataProvider.PROVIDER_URI);
  2. chartDroidIntent.putExtra(Intent.EXTRA_TITLE, "Chart droid");
  3. chartDroidIntent.addCategory("com.googlecode.chartdroid.intent.category.PIE_CHART");
  4. startActivity(chartDroidIntent);


 

發佈了16 篇原創文章 · 獲贊 3 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章