前言:html
在不少項目中都會使用到圖表,具體表現形式爲餅圖、折線圖、柱狀圖等,可是網上有不少圖表架包都是須要收費的,而Google的AChartEngine是免費的,因而AChartEngine就變成了首選方案,接下來就介紹一下AChartEngine在項目中的具體使用方法。java
AChartEngine簡介:android
AChartEngine是一款基於Android的圖表繪製引擎;app
AChartEngine支持繪製餅圖、柱狀圖、折線圖、散點圖等;佈局
AChartEngine繪製的圖表都支持水平(默認)或垂直方式展現,而且支持許多其餘的自定義功能;字體
全部的圖表均可以創建爲一個view,也能夠創建爲一個用於啓動activity的intent。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) 設置百分比