本文介绍了android中如何使用achartengine绘制饼图和柱状图,请分别尝试饼图和柱状图,曲线图。

先看效果图:

先看看获取数据:

 Workbook workbook = Workbook.getWorkbook(file);
workbook.getNumberOfSheets();
//获得第一张工作表
Sheet sheet = workbook.getSheet(0);
int Rows = sheet.getRows(); //行数
int Cols = sheet.getColumns(); //列数 Log.i("huang", "当前工作表的名字:" + sheet.getName());
Log.i("huang", "总行数:" + Rows);
Log.i("huang", "总列数:" + Cols); for (int i = 0; i < Cols; ++i) {
for (int j = 0; j < Rows; ++j) {
// getCell(Col,Row)获得单元格的值
System.out.print((sheet.getCell(i, j)).getContents() + "\t");
if ((sheet.getCell(i, j)).getContents().equals("1") && Tag) {
Bugseriousnessone.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("2") && Tag) {
Bugseriousnesstwo.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("3") && Tag) {
Bugseriousnessthrid.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("4") && Tag) {
Bugseriousnessfour.add((sheet.getCell(i, j)).getContents()); } else if ((sheet.getCell(i, j)).getContents().equals("代码错误")) {
mistake.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("界面优化")) {
optimization.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("需求缺失")) {
Lackofdemand.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("设计图与原型不符")) {
inconformity.add((sheet.getCell(i, j)).getContents()); } else if ((sheet.getCell(i, j)).getContents().equals("蔡星")) {
caixing.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("钱兵兵")) {
qianbingbing.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("何飞良")) {
hefeiliang.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("张菁")) {
zhangjing.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("舒紫鹏")) {
shuzipeng.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("金星")) {
jinxing.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("李璇")) {
lixuan.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("陈海珊")) {
haishan.add((sheet.getCell(i, j)).getContents()); } else if ((sheet.getCell(i, j)).getContents().equals("激活次数")) {
Tag = false; } else if ((sheet.getCell(i, j)).getContents().equals("1") && !Tag) {
one.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("2") && !Tag) {
two.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("3") && !Tag) {
thrid.add((sheet.getCell(i, j)).getContents());
} else if ((sheet.getCell(i, j)).getContents().equals("4") && !Tag) {
four.add((sheet.getCell(i, j)).getContents());
}
} System.out.print("\n");
} Log.i("huang", one.size() + "");
Log.i("huang", two.size() + "");
Log.i("huang", thrid.size() + "");
Log.i("huang", four.size() + "");
// 得到第一列第一行的单元格
Cell cell1 = sheet.getCell(0, 0);
String result = cell1.getContents();
System.out.println(result);
workbook.close(); Toast.makeText(this, "数据获取成功", Toast.LENGTH_LONG).show();
Bugseriousness.setEnabled(true);
bugtype.setEnabled(true);
whocreate.setEnabled(true);
bugcount.setEnabled(true);
getData.setEnabled(false); } catch (Exception e) {
e.printStackTrace();
} }

AChartEngine(简称ACE)是Google的一个开源图表库(for Android)。它功能强大,支持散点图、折线图、饼图、气泡图、柱状图、短棒图、仪表图等多种图表。

代码中的注释解释了图标中的各种设置的使用方法。

需要注意的是,0.6版本不再支持Android 2.0以下(包含2.0)。也就是说如果你的目标平台使用了7以下SDK版本,比如Android1.5-2.0。则需要下载老版本的ACE 0.5。

一.achartengine库的下载,下载地址:

http://code.google.com/p/achartengine/downloads/list

下载完成后,把jar文件粘贴到libs文件夹

 

二.在android项目中如何使用

修改AndroidManifest.xml

主要是加入一个<activity>:

<activity android:name="org.achartengine.GraphicalActivity"/>

呆会我们使用ACE生成柱状图,会在一个特殊的Activit中才能显示,这个Activity就是ACE库中的GraphicalActivity 。我们需要在AndroidManifest.xml中申明它,否则Android会报找不到Activity错误。

先定义一个GraphicalView

GraphicalView graphicalView;

其中的dataset表示数据源,renderer表示渲染参数,type表示类型

设置dataset的方法--饼图

 

设置renderer的方法中的相关属性----饼图

/**
* 设置数据源
*
* @param title
* @param values
* @return
*/
private CategorySeries buildCategoryDataset(String title, double[] values) {
/** int percent = (int) ((totalMemorySize - availableSize) / (float) totalMemorySize * 100);
* 计算百分比
*/ String mistakeper = String.format("%.2f", (mistake.size() / (float) ((mistake.size() + optimization.size() + Lackofdemand.size() + inconformity.size())) * 100)) + "%"; String optimizationper = String.format("%.2f", (optimization.size() / (float) ((mistake.size() + optimization.size() + Lackofdemand.size() + inconformity.size())) * 100)) + "%";
String Lackofdemandper = String.format("%.2f", (Lackofdemand.size() / (float) ((mistake.size() + optimization.size() + Lackofdemand.size() + inconformity.size())) * 100)) + "%";
String inconformityper = String.format("%.2f", (inconformity.size() / (float) ((mistake.size() + optimization.size() + Lackofdemand.size() + inconformity.size())) * 100)) + "%"; CategorySeries series = new CategorySeries(title);
series.add("代码错误" + mistakeper, values[0]);
series.add("界面优化" + optimizationper, values[1]);
series.add("需求缺失" + Lackofdemandper, values[2]);
series.add("设计图与原型不符" + inconformityper, values[3]); return series; } /**
* 设置渲染的相关参数
*
* @param colors
* @return
*/ private DefaultRenderer buildCategoryRenderer(int[] colors) {
DefaultRenderer renderer = new DefaultRenderer(); renderer.setLegendTextSize(20);// 设置左下角表注的文字大小
renderer.setZoomButtonsVisible(true);//设置显示放大缩小按钮
renderer.setZoomEnabled(false);// 设置不允许放大缩小. renderer.setChartTitleTextSize(60);// 设置图表标题的文字大小
renderer.setChartTitle("统计结果共" + inall + "个bug");// 设置图表的标题 默认是居中顶部显示
renderer.setLabelsTextSize(20);// 饼图上标记文字的字体大小
// renderer.setLabelsColor(Color.WHITE);//饼图上标记文字的颜色 renderer.setPanEnabled(false);// 设置是否可以平移
renderer.setDisplayValues(true);//是否显示值
renderer.setClickEnabled(true);// 设置是否可以被点击 ---------未被认证成功
renderer.setMargins(new int[]{20, 30, 15, 0});
// margins - an array containing the margin size values, in this order:
// top, left, bottom, right
for (int color : colors) {
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(color);
renderer.addSeriesRenderer(r);
} return renderer;
}
 
 

最后将graphicalView放入指定的layout里

1 layout=(LinearLayout)findViewById(R.id.linearlayout);
2layout.removeAllViews();
3layout.setBackgroundColor(Color.BLACK);
4 layout.addView(graphicalView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

效果截图

下面看看柱形图的一些属性

步骤:

下面创建一个AChart接口

  1. public interface AChartAbstract {
  2. /**
  3. * 获取一个当前类型图标的Intent实例
  4. */
  5. public Intent getIntent(Context context);
  6. }

public class BarChart implements AChartAbstract {
ArrayList<String> caixing;
ArrayList<String> hefeiliang;
ArrayList<String> qianbingbing;
ArrayList<String> zhangjing;
ArrayList<String> shuzipeng;
ArrayList<String> jinxing;
ArrayList<String> lixuan;
ArrayList<String> haishan; public BarChart(ArrayList<String> caixing, ArrayList<String> hefeiliang, ArrayList<String> qianbingbing, ArrayList<String> zhangjing, ArrayList<String> shuzipeng, ArrayList<String> jinxing, ArrayList<String> lixuan, ArrayList<String> haishan) {
this.caixing = caixing;
this.hefeiliang = hefeiliang;
this.qianbingbing = qianbingbing;
this.zhangjing = zhangjing;
this.shuzipeng = shuzipeng;
this.jinxing = jinxing;
this.lixuan = lixuan;
this.haishan = haishan;
} @Override
public Intent getIntent(Context context) {
Intent intent = ChartFactory.getBarChartIntent(context, getDataSet(), getRenderer(), org.achartengine.chart.BarChart.Type.STACKED, "谁创建的bug---柱形图");
return intent;
} /**
* 构造数据
*
* @return
*/
public XYMultipleSeriesDataset getDataSet() {
XYMultipleSeriesDataset barDataset = new XYMultipleSeriesDataset();
CategorySeries barSeries = new CategorySeries("柱形图");
barSeries.add(caixing.size());
barSeries.add(hefeiliang.size());
barSeries.add(qianbingbing.size());
barSeries.add(zhangjing.size());
barSeries.add(shuzipeng.size());
barSeries.add(jinxing.size());
barSeries.add(lixuan.size());
barSeries.add(haishan.size());
barDataset.addSeries(barSeries.toXYSeries());
return barDataset; } /**
* 构造渲染器 XYMultipleSeriesRenderer可以理解为是描绘器
*
* @return
*/ public XYMultipleSeriesRenderer getRenderer() {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
// renderer.setChartTitle("当月开票");
// // 设置标题的字体大小
// renderer.setChartTitleTextSize(16);
renderer.setXTitle("android2.2.0bug统计图");
renderer.setYTitle("单位(个)");
renderer.setAxesColor(Color.WHITE);
renderer.setLabelsColor(Color.WHITE);
// 设置X轴的最小数字和最大数字
renderer.setXAxisMin(0.5);
renderer.setXAxisMax(5.5);
// 设置Y轴的最小数字和最大数字
renderer.setYAxisMin(0);
renderer.setYAxisMax(300);
renderer.addXTextLabel(1, "蔡星");
renderer.addXTextLabel(2, "何飞良");
renderer.addXTextLabel(3, "钱兵兵");
renderer.addXTextLabel(4, "张菁");
renderer.addXTextLabel(5, "舒紫鹏");
renderer.addXTextLabel(6, "金星");
renderer.addXTextLabel(7, "李璇");
renderer.addXTextLabel(8, "陈海珊"); renderer.setZoomButtonsVisible(false);
// 设置渲染器允许放大缩小
renderer.setZoomEnabled(false);
// 消除锯齿
renderer.setAntialiasing(true);
// 设置背景颜色
renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(Color.GRAY);
// 设置每条柱子的颜色
SimpleSeriesRenderer sr = new SimpleSeriesRenderer();
sr.setColor(Color.YELLOW);
renderer.addSeriesRenderer(sr);
// 设置每个柱子上是否显示数值
renderer.getSeriesRendererAt(0).setDisplayChartValues(true);
// X轴的近似坐标数 (这样不显示横坐标)
renderer.setXLabels(0);
// Y轴的近似坐标数
renderer.setYLabels(6);
// 刻度线与X轴坐标文字左侧对齐
renderer.setXLabelsAlign(Align.LEFT);
// Y轴与Y轴坐标文字左对齐
renderer.setYLabelsAlign(Align.LEFT);
// 允许左右拖动,但不允许上下拖动.
renderer.setPanEnabled(true, false);
// 柱子间宽度
renderer.setBarSpacing(0.3f);
// 设置X,Y轴单位的字体大小
renderer.setAxisTitleTextSize(30);
//设置左下角的字体大小
renderer.setLegendTextSize(30);
//设置刻度的字体大小
renderer.setLabelsTextSize(30);
return renderer;
}
}

最后主函数直接

Intent intent = new BarChart(caixing, hefeiliang, qianbingbing, zhangjing, shuzipeng, jinxing, lixuan, haishan).getIntent(this);
startActivity(intent);

 

最后附上一些相关属性:

DefaultRenderer:

void

addSeriesRenderer(int index, SimpleSeriesRenderer renderer) 
增加一个renderer到multiple renderer中,index是指定的位置.

void

addSeriesRenderer(SimpleSeriesRenderer renderer)增加一个renderer到multiplerenderer中

int

getAxesColor() 
得到X轴的颜色.

int

getBackgroundColor() 
得到背景色

java.lang.String

getChartTitle() 
得到图表的标题

float

getChartTitleTextSize() 
得到图表标题的字号

int

getLabelsColor() 
得到Y轴的颜色.

float

getLabelsTextSize() 
得到Y轴的字号.

int

getLegendHeight() 
得到图例的高度.

float

getLegendTextSize() 
得到图例的字号.

int[]

getMargins() 
得到图表外边框的大小.

float

getOriginalScale() 
Returns the original value to be used for scaling the chart.

float

getScale() 
Returns the value to be used for scaling the chart.

int

getSelectableBuffer() 
得到点的缓冲半径值(在某点附件点击时,多大范围内都算点击这个点) Returns the selectable radius value around clickable points.

SimpleSeriesRenderer

getSeriesRendererAt(int index) 
在multiple renderer中得到指定位置的 renderer.

int

getSeriesRendererCount() 得到multiple renderer集合中renderer的个数.

SimpleSeriesRenderer[]

getSeriesRenderers() 
得到 multiple renderer 中的renderer数组.

float

getStartAngle() 
得到圆形图(例如:饼图/圆环图等)的开始角度.

java.lang.String

getTextTypefaceName()

得到字体名.

int

getTextTypefaceStyle()

得到字体类型.

float

getZoomRate()

得到放大缩小的倍率.

boolean

isAntialiasing() 
Returns the antialiasing flag value.

boolean

isApplyBackgroundColor()

得到是否应用背景色的设置结果(true/false).

boolean

isClickEnabled()

得到是否启用点击事件.

boolean

isExternalZoomEnabled() 
Returns the enabled state of the external (application implemented) zoom.

boolean

isFitLegend()

得到是否设置图例大小自适应.

boolean

isInScroll() 
Returns if the chart is inside a scroll view and doesn't need to shrink.

boolean

isPanEnabled() 
得到是否允许拖动 Returns the enabled state of the pan.

boolean

isShowAxes()

得到是否显示X轴.

boolean

isShowCustomTextGrid()

得到是否显示X轴和Y轴网格.

boolean

isShowGridX()

得到是否显示X轴网格.

boolean

isShowGridY()

得到是否显示Y轴网格.

boolean

isShowLabels()

得到是否显示刻度.

boolean

isShowLegend()

得到是否显示图例.

boolean

isZoomButtonsVisible()

得到是否显示放到缩小按钮.

boolean

isZoomEnabled()

是否支持放大缩小.

void

removeSeriesRenderer(SimpleSeriesRenderer renderer) 
在multiple renderer中移除一个renderer.

void

setAntialiasing(boolean antialiasing) 
Sets the antialiasing value.

void

setApplyBackgroundColor(boolean apply)

设置是否应用背景色.

void

setAxesColor(int color)

设置X轴的颜色.

void

setBackgroundColor(int color)

设置背景色.

void

setChartTitle(java.lang.String title)

设置图表的标题.

void

setChartTitleTextSize(float textSize)

设置图表标题字号.

void

setClickEnabled(boolean enabled)

设置是否允许单击事件.

void

setExternalZoomEnabled(boolean enabled) 
Sets the enabled state of the external (application implemented) zoom.

void

setFitLegend(boolean fit)

设置图例字号自适应.

void

setInScroll(boolean inScroll) 
To be set if the chart is inside a scroll view and doesn't need to shrink when not enough space.

void

setLabelsColor(int color)

设置坐标颜色.

void

setLabelsTextSize(float textSize) 
设置坐标字号.

void

setLegendHeight(int height) 
设置图例高度(单位: pixels).

void

setLegendTextSize(float textSize)

设置图例字号.

void

setMargins(int[] margins)

设置外边框(单位:pixels)上/左/下/右.

void

setPanEnabled(boolean enabled) 
设置是否允许拖动 Sets the enabled state of the pan.

void

setScale(float scale) 
Sets the value to be used for scaling the chart.

void

setSelectableBuffer(int buffer) 
设置点的缓冲半径值(在某点附件点击时,多大范围内都算点击这个点) Sets the selectable radius value around clickable points.

void

setShowAxes(boolean showAxes)

设置是否显示X轴.

void

setShowCustomTextGrid(boolean showGrid) 
设置X轴和Y轴网格是否显示.

void

setShowGrid(boolean showGrid)

设置是否显示网格.

void

setShowGridX(boolean showGrid)

设置是否显示X轴网格.

void

setShowGridY(boolean showGrid)

设置是否显示Y轴网格.

void

setShowLabels(boolean showLabels)

设置是否显示坐标.

void

setShowLegend(boolean showLegend)

设置是否显示图例.

void

setStartAngle(float startAngle) 
设置圆形图(例如:饼图/圆环图等)的开始角度.

void

setTextTypeface(java.lang.String typefaceName, int style)

设置字体名和类型.

void

setZoomButtonsVisible(boolean visible)

设置是否显示放大缩小按钮.

void

setZoomEnabled(boolean enabled)

设置是否允许放大和缩小.

void

setZoomRate(float rate) 
设置放大缩小的倍率.

XYMultipleSeriesDataset:

void

addSeries(int index, XYSeries series) 
在指定位置增加一个序列.

void

addSeries(XYSeries series) 
增加一个序列.

XYSeries[]

getSeries() 
得到序列的数组

XYSeries

getSeriesAt(int index) 
得到指定位置的序列.

int

getSeriesCount() 
得到序列的个数.

void

removeSeries(int index) 
移除指定位置的序列.

void

removeSeries(XYSeries series) 
移除一个序列

【Android】achartengine的柱状图和饼状图的使用的更多相关文章

  1. WPF、Silverlight项目中使用柱状图、饼状图、折线图

    在开发的过程中,可能会遇到柱状图.饼状图.折线图来更好的显示数据,最近整理了一下,遂放出来望需要的朋友可以参考.本文仅仅是简单显示,如需复杂显示效果请参考官网代码示例.----本文代码使用WPF,Si ...

  2. 使用FusionCharts出柱状图和饼状图

    在最近的项目中,需要使用出图,能够查看柱状图,饼状图等效果,刚开始我们用JS写的效果,发现效果不理想,找了一个JS插件发现效果还是不理想,客户也不满意,客户希望要很炫的效果,最后我们使用了Fusion ...

  3. FusionChart实现柱状图、饼状图的动态数据显示 附Demo

    最近做的项目中需要用饼状图显示——'问卷调查'的统计结果(之前用过FusionChart做过柱状图的数据展示,那还是两年前的事了),在网上查了下FusionChart实现饼状图显示方面的资料,却发现资 ...

  4. 前端数据统计用做Bootstrap的一些柱状图、饼状图和折线图案例

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. Bootstrap ...

  5. Android图表库MPAndroidChart(八)——饼状图的扩展:折线饼状图

    Android图表库MPAndroidChart(八)--饼状图的扩展:折线饼状图 我们接着上文,饼状图的扩展,增加折现的说明,来看下我们要实现的效果 因为之前对MPAndroidChart的熟悉,所 ...

  6. Android图表库MPAndroidChart(七)—饼状图可以再简单一点

    Android图表库MPAndroidChart(七)-饼状图可以再简单一点 接上文,今天实现的是用的很多的,作用在统计上的饼状图,我们看下今天的效果 这个效果,我们实现,和之前一样的套路,我先来说下 ...

  7. FusionChart实现柱状图、饼状图的动态数据显示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. echarts 柱状图和饼状图动态获取后台数据

    运用echarts来实现图表 1.首先下载echarts包  http://echarts.baidu.com/echarts2/doc/example.html,在这里我下载的是 2.将echart ...

  9. DevExpress使用之ChartControl控件绘制图表(多坐标折线图、柱状图、饼状图)

    最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...

随机推荐

  1. 使用Swift打造动态库SDK和DemoAPP时所遇到的(Xcode7.3)

    使用Swift开发SDK的优点是,生成的SDK对于Obj-C或是Swift调用都不需要自己去建桥接文件,因为Swift的SDK打包时默认已经自动生成供OC调用的.h文件.OC调用时直接import,s ...

  2. ArcGIS Server开发教程系列(2)配置ARCMAP和ARCCatalog发布服务

    1.       Arc catalog的配置 打开catalog,如图新增刚刚创建的server 1. Use GIS services: 用户身份连接 使用此种连接,可以浏览.使用站点内发布的所有 ...

  3. matlab 有趣小细节

    图像的默认显示方式,坐标从1开始计数.是从左向右,从上到下为正,分别为x和y轴          如果加入x轴和y轴画成成的格子,起始位置并不是严格的左上角,而是像素的中心点,并不是以像素的边缘画格子 ...

  4. QT读取文本(字符串)最后一行的方法

    QString str; QTextStream ts(&str); str = this->toPlainText(); ts.seek(str.lastIndexOf("- ...

  5. ThinkPhp 验证码不显示图片

    验证码不显示原因分析: 1.先确保是否开启了 gd库 2.页面是否存在bom头 3.导入的ORG.Util.Image是否存在 4.入口文件中是否有define('APP_DEBUG', TRUE); ...

  6. codevs1204 寻找子串位置

    题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个字符串a和b 输出描述  ...

  7. 在Heroku部署时,无法加载 css,js,图片资源解决办法

    解决方案: 首先查看Gemfile, 确保group :production do 里添加了 gem "rails_12factor", '0.0.2' 然后在本地执行 rails ...

  8. Linux C fcntl()函数详解

    fcntl系统调用 功能描述:根据文件描述词来操作文件的特性. 用法: int fcntl(int fd, int cmd);  int fcntl(int fd, int cmd, long arg ...

  9. Go - 项目收藏

    谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects Web框架 web.go.beego Go项目 httpmq:A ...

  10. JS表单验证-12个常用的JS表单验证

    JS表单验证-12个常用的JS表单验证 最近有个项目用到了表单验证,小编在项目完结后的这段时间把常用的JS表单验证demo整理了一下,和大家一起分享~~~ 1. 长度限制 <p>1. 长度 ...