Android Studio利用AChartEngine制作餅圖的方法
前言:
眾所周知,大家在很多項目中都會使用到圖表,具體表現(xiàn)形式為餅圖、折線圖、柱狀圖等,但是網(wǎng)上有很多圖表架包都是需要收費的,而Google的AChartEngine是免費的,于是AChartEngine就變成了首選方案,接下來就介紹一下AChartEngine在項目中的具體使用方法。下面話不多說了,來一起看看詳細的介紹吧
AChartEngine簡介:
AChartEngine是一款基于Android的圖表繪制引擎;
AChartEngine支持繪制餅圖、柱狀圖、折線圖、散點圖等;
AChartEngine繪制的圖表都支持水平(默認)或垂直方式展示,并且支持許多其他的自定義功能;
所有的圖表都可以建立為一個view,也可以建立為一個用于啟動activity的intent。
AChartEngine的運行機制:
每個圖表都需要一個數(shù)據(jù)集 (Dataset) 和 渲染器集合 (Renderer);
數(shù)據(jù)集:由許多數(shù)據(jù)組成;
渲染器:由不同的子渲染器組成;
獲取Activity 或 組件 : 圖表工廠 (ChartFactory) 通過調(diào)用 數(shù)據(jù)集 (Dataset) 和 渲染器集合 (Renderer) 可以生成帶圖表的 GraphicalView 或者 GraphicalActivity。
效果圖:

具體步驟:
1、下載AChartEngine庫:http://code.google.com/p/achartengine/downloads/list
2、將下載的jar包引入到項目中(具體方法可參考我的另一篇博文:Android Studio 在項目中引用第三方j(luò)ar包 )
3、構(gòu)建數(shù)據(jù)集(Dataset),CategorySeries.add(String category,double value)
double[] values = {500.00, 800.00, 1000.00, 900.00};
double sumVal = values[0] + values[1] + values[2] + values[3];
CategorySeries dataset = buildCategoryDataset("圖文報表", values);
protected CategorySeries buildCategoryDataset(String title, double[] values){
CategorySeries series = new CategorySeries(title);
series.add("房租:"+values[0], values[0]/sumVal);
series.add("伙食費:"+values[1], values[1]/sumVal);
series.add("生活費:"+values[2], values[2]/sumVal);
series.add("其它:"+values[3], values[3]/sumVal);
return series;
}
4、構(gòu)建渲染器(Renderer)
餅圖的渲染器:
private DefaultRenderer getPieRenderer(){
DefaultRenderer renderer = new DefaultRenderer();
renderer.setZoomButtonsVisible(true);//設(shè)置顯示放大放小縮小按鈕
renderer.setZoomEnabled(true);//設(shè)置允許放大放小
//設(shè)置各個類別分別對應的顏色
SimpleSeriesRenderer yellowRenderer = new SimpleSeriesRenderer();
yellowRenderer.setColor(Color.YELLOW);
SimpleSeriesRenderer blueRenderer = new SimpleSeriesRenderer();
blueRenderer.setColor(Color.BLUE);
SimpleSeriesRenderer redRenderer = new SimpleSeriesRenderer();
redRenderer.setColor(Color.RED);
renderer.addSeriesRenderer(yellowRenderer);
renderer.addSeriesRenderer(blueRenderer);
renderer.addSeriesRenderer(redRenderer);
renderer.setLabelsTextSize(30);//設(shè)置坐標字號
renderer.setLegendTextSize(50);//設(shè)置圖例字號
renderer.setApplyBackgroundColor(true);//設(shè)置是否應用背景色
renderer.setBackgroundColor(Color.BLACK);
return renderer;
}
對應的顏色:
int[] colors = {Color.BLUE, Color.GREEN, Color.MAGENTA, Color.RED};
DefaultRenderer renderer = buildCategoryRenderer(colors);
protected DefaultRenderer buildCategoryRenderer(int[] colors){
DefaultRenderer renderer = new DefaultRenderer();
renderer.setLegendTextSize(35);//設(shè)置左下角標注文字的大小
renderer.setLabelsTextSize(25);//餅圖上標記文字的字體大小
renderer.setLabelsColor(Color.BLACK);//餅圖上標記文字的顏色
renderer.setPanEnabled(false);
renderer.setDisplayValues(true);//顯示數(shù)據(jù)
for(int color : colors){
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(color);
//設(shè)置百分比
r.setChartValuesFormat(NumberFormat.getPercentInstance());
renderer.addSeriesRenderer(r);
}
return renderer;
}
5、生成餅圖
有兩種方式:調(diào)用ChartFactory.getPieChartIntent()或者 getPieChartView()
區(qū)別在于:
一個返回Intent,這個intent可以啟動一個特定的activity;
另一個返回GraphicalView,這個GraphicalView可以靈活設(shè)置,它可以僅作為一部分顯示在任何activity上
用ChartFactory.getPieChartIntent()方法生成餅圖:

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

用ChartFactory.getPieChartView()方法生成餅圖:
先在布局文件中創(chuàng)建控件:
<LinearLayout android:id="@+id/ll_expense_piechart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:orientation="vertical"> </LinearLayout>
Activity文件中生成餅圖:
private LinearLayout ll_expense_piechart;
private GraphicalView graphicalView;
private void initPieChart(View v){
ll_expense_piechart = (LinearLayout) v.findViewById(R.id.ll_expense_piechart);
ll_expense_piechart.removeAllViews();
graphicalView = ChartFactory.getPieChartView(getContext()
,dataset, renderer);//餅狀圖
graphicalView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
ll_expense_piechart.addView(graphicalView);
}
Renderer常用的設(shè)置:
addSeriesRenderer(SimpleSeriesRenderer renderer)增加一個renderer到multiple renderer中
setApplyBackgroundColor(boolean apply) 設(shè)置是否應用背景色
setBackgroundColor(int color) 設(shè)置背景色
setChartTitle(java.lang.String title)設(shè)置圖表的標題
setChartTitleTextSize(float textSize)設(shè)置圖表標題字號
setClickEnabled(boolean enabled) 設(shè)置是否允許單擊事件
setFitLegend(boolean fit) 設(shè)置圖例字號自適應
setLegendHeight(int height)設(shè)置圖例高度(單位: pixels)
setLegendTextSize(float textSize) 設(shè)置圖例字號
setPanEnabled(boolean enabled) 設(shè)置是否允許拖動
setShowLegend(boolean showLegend) 設(shè)置是否顯示圖例
setTextTypeface(java.lang.String typefaceName, int style) 設(shè)置字體名和類型
setZoomButtonsVisible(boolean visible) 設(shè)置是否顯示放大縮小按鈕
setZoomEnabled(boolean enabled) 設(shè)置是否允許放大和縮小
setZoomRate(float rate) 設(shè)置放大縮小的倍率
setDisplayValues(boolean enabled) 設(shè)置是否顯示數(shù)據(jù)
setChartValuesFormat(NumberFormat format) 設(shè)置百分比
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android三種方式生成矢量圖之VectorDrawable類使用詳解
這篇文章主要介紹了Android三種方式生成矢量圖的VectorDrawable類,2014年6月26日的I/O?2014開發(fā)者大會上谷歌正式推出了Android?L,它帶來了全新的設(shè)計語言Material?Design,新的API也提供了這個類VectorDrawable2023-02-02
Android XmlPullParser 方式解析 Xml 文檔
這篇文章主要介紹了Android XmlPullParser 方式解析 Xml 文檔的相關(guān)資料,需要的朋友可以參考下2017-06-06
Android自定義Scrollbar的兩種實現(xiàn)方式
本文介紹兩種實現(xiàn)自定義滾動條的方法,分別通過ItemDecoration方案和獨立View方案實現(xiàn)滾動條定制化,文章通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2025-03-03
Android Intent傳遞數(shù)據(jù)底層分析詳細介紹
這篇文章主要介紹了Android Intent傳遞數(shù)據(jù)底層分析詳細介紹的相關(guān)資料,需要的朋友可以參考下2017-02-02
Android AIDL實現(xiàn)兩個APP間的跨進程通信實例
這篇文章主要為大家詳細介紹了Android AIDL實現(xiàn)兩個APP間的跨進程通信實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04
Android實現(xiàn)仿微軟系統(tǒng)加載動畫效果
這篇文章主要介紹了Android實現(xiàn)仿微軟系統(tǒng)加載動畫效果的方法,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下2021-04-04
Android編程實現(xiàn)為ListView創(chuàng)建上下文菜單(ContextMenu)的方法
這篇文章主要介紹了Android編程實現(xiàn)為ListView創(chuàng)建上下文菜單(ContextMenu)的方法,簡單分析了上下文菜單的功能及ListView創(chuàng)建上下文菜單(ContextMenu)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
flutter優(yōu)雅實現(xiàn)掃碼槍獲取數(shù)據(jù)源示例詳解
這篇文章主要為大家介紹了flutter優(yōu)雅實現(xiàn)掃碼槍獲取數(shù)據(jù)源示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01

