Android Studio 使用AChartEngine製做餅圖

前言:html

       在不少項目中都會使用到圖表,具體表現形式爲餅圖、折線圖、柱狀圖等,可是網上有不少圖表架包都是須要收費的,而Google的AChartEngine是免費的,因而AChartEngine就變成了首選方案,接下來就介紹一下AChartEngine在項目中的具體使用方法。java

 

AChartEngine簡介:android

       AChartEngine是一款基於Android的圖表繪製引擎;app

       AChartEngine支持繪製餅圖、柱狀圖、折線圖、散點圖等;佈局

       AChartEngine繪製的圖表都支持水平(默認)或垂直方式展現而且支持許多其餘的自定義功能;字體

       全部的圖表均可以創建爲一個view,也能夠創建爲一個用於啓動activityintent。ui

 

AChartEngine的運行機制:
google

       每一個圖表都須要一個數據集 (Dataset) 和 渲染器集合 (Renderer);spa

       數據集由許多數據組成;3d

       渲染器由不一樣的子渲染器組成;

       獲取Activity 或 組件 : 圖表工廠 (ChartFactory) 經過調用 數據集 (Dataset) 和 渲染器集合 (Renderer) 能夠生成帶圖表的 GraphicalView 或者 GraphicalActivity。

 

效果圖:

         

 

具體步驟:

       一、下載AChartEngine庫:http://code.google.com/p/achartengine/downloads/list

       二、將下載的jar包引入到項目中(具體方法可參考個人另外一篇博文:Android Studio 在項目中引用第三方jar包

       三、構建數據集(Dataset),CategorySeries.add(String category,double value)

 1 double[] values = {500.00, 800.00, 1000.00, 900.00};
 2 double sumVal = values[0] + values[1] + values[2] + values[3];
 3 
 4 CategorySeries dataset = buildCategoryDataset("圖文報表", values);
 5 
 6 protected CategorySeries buildCategoryDataset(String title, double[] values){
 7     CategorySeries series = new CategorySeries(title);
 8     series.add("房租:"+values[0], values[0]/sumVal);
 9     series.add("伙食費:"+values[1], values[1]/sumVal);
10     series.add("生活費:"+values[2], values[2]/sumVal);
11     series.add("其它:"+values[3], values[3]/sumVal);
12     return series;
13 }

       四、構建渲染器(Renderer)

            餅圖的渲染器:

 1 private DefaultRenderer getPieRenderer(){
 2     DefaultRenderer renderer = new DefaultRenderer();
 3     renderer.setZoomButtonsVisible(true);//設置顯示放大放小縮小按鈕
 4     renderer.setZoomEnabled(true);//設置容許放大放小
 5     //設置各個類別分別對應的顏色
 6     SimpleSeriesRenderer yellowRenderer = new SimpleSeriesRenderer();
 7     yellowRenderer.setColor(Color.YELLOW);
 8     SimpleSeriesRenderer blueRenderer = new SimpleSeriesRenderer();
 9     blueRenderer.setColor(Color.BLUE);
10     SimpleSeriesRenderer redRenderer = new SimpleSeriesRenderer();
11     redRenderer.setColor(Color.RED);
12     renderer.addSeriesRenderer(yellowRenderer);
13     renderer.addSeriesRenderer(blueRenderer);
14     renderer.addSeriesRenderer(redRenderer);
15 
16     renderer.setLabelsTextSize(30);//設置座標字號
17     renderer.setLegendTextSize(50);//設置圖例字號
18     renderer.setApplyBackgroundColor(true);//設置是否應用背景色
19     renderer.setBackgroundColor(Color.BLACK);
20 
21     return renderer;
22 }

            對應的顏色:       

 1 int[] colors = {Color.BLUE, Color.GREEN, Color.MAGENTA, Color.RED};
 2 
 3 DefaultRenderer renderer = buildCategoryRenderer(colors);
 4 
 5 protected DefaultRenderer buildCategoryRenderer(int[] colors){
 6     DefaultRenderer renderer = new DefaultRenderer();
 7     renderer.setLegendTextSize(35);//設置左下角標註文字的大小
 8     renderer.setLabelsTextSize(25);//餅圖上標記文字的字體大小
 9     renderer.setLabelsColor(Color.BLACK);//餅圖上標記文字的顏色
10     renderer.setPanEnabled(false);
11     renderer.setDisplayValues(true);//顯示數據
12 
13 
14     for(int color : colors){
15         SimpleSeriesRenderer r = new SimpleSeriesRenderer();
16         r.setColor(color);
17         //設置百分比
18         r.setChartValuesFormat(NumberFormat.getPercentInstance());
19         renderer.addSeriesRenderer(r);
20     }
21     return renderer;
22 }

       五、生成餅圖

            有兩種方式:調用ChartFactory.getPieChartIntent() 或者 getPieChartView()

            區別在於:

            一個返回Intent,這個intent能夠啓動一個特定的activity

            另外一個返回GraphicalView這個GraphicalView能夠靈活設置,它能夠僅做爲一部分顯示在任何activity

 

            ChartFactory.getPieChartIntent()方法生成餅圖:

            

            (備註:使用該方法的話,則須要在AndroidManifest.xml中註冊org.achartengine.GraphicalActivity,添加位置以下圖:)

            

 

            用ChartFactory.getPieChartView()方法生成餅圖:

            先在佈局文件中建立控件:

1 <LinearLayout
2     android:id="@+id/ll_expense_piechart"
3     android:layout_width="wrap_content"
4     android:layout_height="wrap_content"
5     android:layout_centerHorizontal="true"
6     android:layout_centerVertical="true"
7     android:orientation="vertical">
8 </LinearLayout>

            Activity文件中生成餅圖:

 1 private LinearLayout ll_expense_piechart;
 2 private GraphicalView graphicalView;
 3     
 4 private void initPieChart(View v){
 5     ll_expense_piechart = (LinearLayout) v.findViewById(R.id.ll_expense_piechart);
 6     ll_expense_piechart.removeAllViews();
 7 
 8     graphicalView = ChartFactory.getPieChartView(getContext()
 9             ,dataset, renderer);//餅狀圖
10     graphicalView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
11 
12     ll_expense_piechart.addView(graphicalView);
13 }

 

Renderer經常使用的設置:

       addSeriesRenderer(SimpleSeriesRenderer renderer)增長一個renderer到multiple  renderer中

       setApplyBackgroundColor(boolean apply) 設置是否應用背景色

       setBackgroundColor(int color) 設置背景色

       setChartTitle(java.lang.String title)設置圖表的標題

       setChartTitleTextSize(float textSize)設置圖表標題字號

       setClickEnabled(boolean enabled) 設置是否容許單擊事件

       setFitLegend(boolean fit) 設置圖例字號自適應

       setLegendHeight(int height)設置圖例高度(單位: pixels)

       setLegendTextSize(float textSize) 設置圖例字號

       setPanEnabled(boolean enabled) 設置是否容許拖動

       setShowLegend(boolean showLegend) 設置是否顯示圖例

       setTextTypeface(java.lang.String typefaceName, int style) 設置字體名和類型

       setZoomButtonsVisible(boolean visible) 設置是否顯示放大縮小按鈕

       setZoomEnabled(boolean enabled) 設置是否容許放大和縮小

       setZoomRate(float rate) 設置放大縮小的倍率

       setDisplayValues(boolean enabled) 設置是否顯示數據

       setChartValuesFormat(NumberFormat format) 設置百分比

相關文章
相關標籤/搜索