热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Android】achartengine的柱状图和饼状图的使用

本文介绍了android中如何使用achartengine绘制饼图和柱状图,请分别尝试饼图和柱状图,曲线图。先看效果图:先看看获取数据:

本文介绍了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 for (int j = 0; 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 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.     /** 
  4.      * 获取一个当前类型图标的Intent实例 
  5.      */  
  6.     public Intent getIntent(Context context);  
  7. }  

 

 

 

 

public class BarChart implements AChartAbstract {
ArrayList caixing;
ArrayList hefeiliang;
ArrayList qianbingbing;
ArrayList zhangjing;
ArrayList shuzipeng;
ArrayList jinxing;
ArrayList lixuan;
ArrayList haishan;


public BarChart(ArrayList caixing, ArrayList hefeiliang, ArrayList qianbingbing, ArrayList zhangjing, ArrayList shuzipeng, ArrayList jinxing, ArrayList lixuan, ArrayList 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 listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
author-avatar
天通金1980
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有