Android Studio利用AChartEngine制作饼图的方法

所属分类: 软件编程 / Android 阅读数: 52
收藏 0 赞 0 分享

前言:

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

AChartEngine简介:

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

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

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

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

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)

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、构建渲染器(Renderer)

饼图的渲染器:

private DefaultRenderer getPieRenderer(){
 DefaultRenderer renderer = new DefaultRenderer();
 renderer.setZoomButtonsVisible(true);//设置显示放大放小缩小按钮
 renderer.setZoomEnabled(true);//设置允许放大放小
 //设置各个类别分别对应的颜色
 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);//设置坐标字号
 renderer.setLegendTextSize(50);//设置图例字号
 renderer.setApplyBackgroundColor(true);//设置是否应用背景色
 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);//设置左下角标注文字的大小
 renderer.setLabelsTextSize(25);//饼图上标记文字的字体大小
 renderer.setLabelsColor(Color.BLACK);//饼图上标记文字的颜色
 renderer.setPanEnabled(false);
 renderer.setDisplayValues(true);//显示数据


 for(int color : colors){
 SimpleSeriesRenderer r = new SimpleSeriesRenderer();
 r.setColor(color);
 //设置百分比
 r.setChartValuesFormat(NumberFormat.getPercentInstance());
 renderer.addSeriesRenderer(r);
 }
 return renderer;
}

5、生成饼图

有两种方式:调用ChartFactory.getPieChartIntent()或者 getPieChartView()

区别在于:

一个返回Intent,这个intent可以启动一个特定的activity;

另一个返回GraphicalView,这个GraphicalView可以灵活设置,它可以仅作为一部分显示在任何activity上

用ChartFactory.getPieChartIntent()方法生成饼图:

(备注:使用该方法的话,则需要在AndroidManifest.xml中注册org.achartengine.GraphicalActivity,添加位置如下图:)

用ChartFactory.getPieChartView()方法生成饼图:

先在布局文件中创建控件:

<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常用的设置:

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

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享

TextView显示系统时间(时钟功能带秒针变化

用System.currentTimeMillis()可以获取系统当前的时间,我们可以开启一个线程,然后通过handler发消息,来实时的更新TextView上显示的系统时间,可以做一个时钟的功能
收藏 0 赞 0 分享

Android用ListView显示SDCard文件列表的小例子

本文简单实现了用ListView显示SDCard文件列表,目录的回退等功能暂不讨论,获取文件列表,files即为所选择目录下的所有文件列表
收藏 0 赞 0 分享

Android拦截外拨电话程序示例

这篇文章主要介绍了Android拦截外拨电话的示例,大家参考使用吧
收藏 0 赞 0 分享

通过Html网页调用本地安卓(android)app程序代码

如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式
收藏 0 赞 0 分享

android Textview文字监控(Textview使用方法)

以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
收藏 0 赞 0 分享

Android ListView长按弹出菜单二种实现方式示例

这篇文章主要介绍了Android ListView长按弹出菜单的方法,大家参考实现
收藏 0 赞 0 分享
查看更多