在日常的統計中,經常要用圖表來給用戶恰當的數據體驗,比如用餅狀圖,柱型圖等。在傳統的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代碼:
在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代碼:
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- WebView googleChartView = new WebView(this);
- setContentView(googleChartView);
- String mUrl = "http://chart.apis.google.com/chart?cht=p3& chd=t:30,60,10&chs=250x100&chl=cars|bikes|trucks";
- googleChartView.loadUrl(mUrl);
- }
因爲要連接網絡,所以要在配置文件中允許使用網絡,在AndroidManifest.xml中如下配置:
最後效果如下圖:
2) 使用Achartengine庫
第二種解決方案是使用Achartengine庫,將其JAR下載後,放到工程的lib包庫中,
java代碼:
- public class AChartExample {
- public Intent execute(Context context) {
- int[] colors = new int[] { Color.RED, Color.YELLOW, Color.BLUE };
- DefaultRenderer renderer = buildCategoryRenderer(colors);
- CategorySeries categorySeries = new CategorySeries("Vehicles Chart");
- categorySeries.add("cars ", 30);
- categorySeries.add("trucks", 20);
- categorySeries.add("bikes ", 60);
- return ChartFactory.getPieChartIntent(context, categorySeries, renderer);
- }
- protected DefaultRenderer buildCategoryRenderer(int[] colors) {
- DefaultRenderer renderer = new DefaultRenderer();
- for (int color : colors) {
- SimpleSeriesRenderer r = new SimpleSeriesRenderer();
- r.setColor(color);
- renderer.addSeriesRenderer(r);
- }
- return renderer;
- }
- }
在上面的代碼中,首先將初始化了colors數組,這裏指定了餅圖的三種顏色,然後在buildCategoryRenderer方法中,使用 SimpleSeriesRenderer類實例來進行初始化,分別設置了餅圖要顯示的系列區域的顏色。而我們將要顯示的數據及標籤內容都放到categorySeries中進行顯示。最後調用ChartFactory的getPieChartIntent方法,傳入categorySeries和renderer即可。
在我們的主類中,進行如下調用:
Intent achartIntent = new AChartExample().execute(this);
startActivity(achartIntent);
最後生成的效果如下圖:
3) 使用Chartdroid
第三種方法是使用chartdroid,要注意的是,如果使用這種方法的話,下載並將其APK包進行安裝。
要使用Chartdroid,必須要使用content provider,我們編寫代碼如下:
java代碼:
- public class ChartDroidDataProvider extends ContentProvider {
- static final String AUTHORITY = "com.xyz.contentprovider.chardroid";
- @Override
- public String getType(Uri uri) {
- return "vnd.android.cursor.dir/vnd.com.googlecode.chartdroid.graphable";
- }
- public static final Uri PROVIDER_URI = new Uri.Builder().scheme(
- ContentResolver.SCHEME_CONTENT).authority(AUTHORITY).build();
- @Override
- public Cursor query(Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- //獲得實際數據
- MatrixCursor c = new MatrixCursor(new String[] { BaseColumns._ID,
- "COLUMN_AXIS_INDEX", "COLUMN_SERIES_INDEX",
- "COLUMN_DATUM_VALUE", "COLUMN_DATUM_LABEL" });
- c.newRow().add(1).add(0).add(1).add(30).add(null);
- c.newRow().add(2).add(0).add(1).add(10).add(null);
- c.newRow().add(3).add(0).add(1).add(60).add(null);
- return c;
- }
- }
在上面的代碼中,我們使用了MatrixCursor生成了相關的數據:30,10,60。關於ChartDroid的詳細 ContentProvider信息,接下來,我們看使用的代碼,如下:
java代碼:
- Intent chartDroidIntent = new Intent(Intent.ACTION_VIEW,ChartDroidDataProvider.PROVIDER_URI);
- chartDroidIntent.putExtra(Intent.EXTRA_TITLE, "Chart droid");
- chartDroidIntent.addCategory("com.googlecode.chartdroid.intent.category.PIE_CHART");
- startActivity(chartDroidIntent);