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) 设置百分比

相关文章
相关标签/搜索