东莞市盛裕绒艺玩具有限公司

东莞市盛裕绒艺玩具有限公司

WSB万事博最新手机版

15221025683
联系方式
全国服务热线: 15221025683

咨询热线:15582116297
联系人:田爱妮
地址:滨江区

Android Studio 使用AChartEngine制作饼图

来源:WSB万事博最新手机版   发布时间:2019-11-06   点击量:383

前言:

       在很多项目中都会使用到图表,具体表现形式为饼图、折线图、柱状图等,但是网上有很多图表架包都是需要收费的,而Google的AChartEngine是免费的,于是AChartEngine就变成了首选方案,接下来就介绍一下AChartEngine在项目中的具体使用方法。

 

AChartEngine简介:

       AChartEngine是一款基于Android的图表绘制引擎;

       AChartEngine支持绘制饼图、柱状图、折线图、散点图等;

       AChartEngine绘制的图表都支持水平(默认)或垂直方式展示并且支持许多其他的自定义功能;

       所有的图表都可以建立为一个view,也可以建立为一个用于启动activityintent。

 

AChartEngine的运行机制:

       每个图表都需要一个数据集 (Dataset) 和 渲染器集合 (Renderer);

       数据集由许多数据组成;

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

       获取Activity 或 组件 : 图表工厂 (ChartFactory) 通过调用 数据集 (Dataset) 和 渲染器集合 (Renderer) 可以生成带图表的 GraphicalView 或者 GraphicalActivity。

 

效果图:

         

 

具体步骤:

       1、下载AChartEngine库:http://code.google.com/p/achartengine/downloads/list

       2、将下载的jar包引入到项目中(具体方法可参考我的另一篇博文:Android Studio 在项目中引用第三方jar包

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

 

相关产品

COPYRIGHTS©2017 WSB万事博最新手机版 ALL RIGHTS RESERVED 备案号:383