1. 程式人生 > >Android Studio 使用AChartEngine製作餅圖

Android Studio 使用AChartEngine製作餅圖

前言:

       在很多專案中都會使用到圖表,具體表現形式為餅圖、折線圖、柱狀圖等,但是網上有很多圖表架包都是需要收費的,而Google的AChartEngine是免費的,於是AChartEngine就變成了首選方案,接下來就介紹一下AChartEngine在專案中的具體使用方法。

AChartEngine簡介:

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

       AChartEngine支援繪製餅圖、柱狀圖、折線圖、散點圖等;

       AChartEngine繪製的圖表都支援水平(預設)或垂直方式展示並且支援許多其他的自定義功能;

       所有的圖表都可以建立為一個

view,也可以建立為一個用於啟動activityintent。

AChartEngine的執行機制:

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

       資料集由許多資料組成;

       渲染器由不同的子渲染器組成;

       獲取Activity 或 元件 : 圖表工廠 (ChartFactory) 通過呼叫 資料集 (Dataset) 和 渲染器集合 (Renderer) 可以生成帶圖表的 GraphicalView 或者 GraphicalActivity。

效果圖:

         

具體步驟:

       3、構建資料集(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 }

4、構建渲染器(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 }

5、生成餅圖

有兩種方式:呼叫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) 設定百分比