android 使用AChartEngine 饼图的实现
1、AChartEngine 简介
AChartEngine是为Android应用而设计的绘图工具库。可用于绘制多种图表,我使用的是achartengine-1.1.0.jar。ChartEngine支持的图表类型:折线图、区域图、散点图、时间图、柱状图、饼状图、气泡式图表、环形图、高低交替图等。
以上每种图表都可以包含多个序列, 可以将X轴以水平或垂直的形式显示,也支持很多自定义的特性。另外,图表可以作为View构建,也可以作为Intent构建这样可以被用于启动一个活动(Activity)。
其实AChartEngine和JFreeChart差不多。JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。
AChartEngine和JFreeChart都是采用Java编写的开放图表制作类库,前者是应用在android上,后者也能主要应用在JAVA SE 或者 JAVA EE上。AChartEngine是谷歌开发的开源项目。
2、AChartEngine 实现PieChart
这里进行了饼图的封装,只需要进行准备好数据就可以实现相应的功能

package com.example.chartdemo;
import java.text.NumberFormat;
import java.util.Map;
import java.util.Random;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.SeriesSelection;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
public class PieChart
{
private static final int[] COLORS = new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.MAGENTA, Color.CYAN,
Color.YELLOW, Color.DKGRAY };
// 设置图例字体大小
private int legendTextSize = 30;
// 设置图例高度
private int legendHeight = 50;
// 设置图例的颜色
private int labelColor = Color.BLACK;
// 设置饼图标题大小
private int titleSize = 50;
private Context context;
// 用来显示PieChart
private GraphicalView pieChartView = null;
// PieChart的主要描绘器
private DefaultRenderer mRenderer = new DefaultRenderer();
private CategorySeries mSeries = new CategorySeries("");
/**
* 数据集 key:名称 value:数目
*/
private Map<String, Double> dataMaps;
/**
* 设置饼图的标题
*/
private String pieTitle;
public PieChart (Map<String, Double> dataMaps , Context context , String pieTitle)
{
this.dataMaps = dataMaps;
this.context = context;
this.pieTitle = pieTitle;
generatePieChartView();
}
private double getAllSum()
{
double sum = 0;
for (Map.Entry<String, Double> entry : dataMaps.entrySet())
{
sum += entry.getValue().doubleValue();
}
return sum;
}
private void generatePieChartView()
{
mRenderer.setZoomButtonsVisible(false);// 显示放大缩小功能按钮
mRenderer.setStartAngle(180);// 设置为水平开始
mRenderer.setDisplayValues(true);// 显示数据
mRenderer.setFitLegend(true);// 设置是否显示图例
mRenderer.setLegendTextSize(legendTextSize);//
mRenderer.setLegendHeight(legendHeight);
mRenderer.setLabelsColor(labelColor);
mRenderer.setChartTitle(pieTitle);// 设置饼图标题
mRenderer.setChartTitleTextSize(titleSize);
mRenderer.setPanEnabled(false);// 图表是否可以移动
mRenderer.setZoomEnabled(false);// 图表是否可以缩放
double sum = getAllSum();
int color_i = 0;
for (Map.Entry<String, Double> entry : dataMaps.entrySet())
{
mSeries.add(entry.getKey(), entry.getValue().doubleValue() / sum);
SimpleSeriesRenderer renderer = new SimpleSeriesRenderer();
if (color_i < COLORS.length)
{
renderer.setColor(COLORS[color_i++]);// 设置描绘器的颜色
}
else
{
renderer.setColor(getRandomColor());// 设置描绘器的颜色
}
renderer.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
mRenderer.addSeriesRenderer(renderer);// 将最新的描绘器添加到DefaultRenderer中
Log.v("color", color_i+"ddd");
}
if (pieChartView == null)
{
// 为空需要从ChartFactory获取PieChartView
pieChartView = ChartFactory.getPieChartView(context, mSeries, mRenderer);// 构建mChartView
// mLinear.addView(mChartView);
}
else
{
pieChartView.repaint();
}
}
public GraphicalView getPieView()
{
return pieChartView;
}
public void onClick(boolean isEnalbed)
{
mRenderer.setClickEnabled(isEnalbed);// 允许点击事件
pieChartView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
SeriesSelection seriesSelection = pieChartView.getCurrentSeriesAndPoint();// 获取当前的类别和指针
if (seriesSelection == null)
{
Toast.makeText(context, "您未选择数据", Toast.LENGTH_SHORT).show();
}
else
{
for (int i = 0; i < mSeries.getItemCount(); i++)
{
mRenderer.getSeriesRendererAt(i).setHighlighted(
i == seriesSelection.getPointIndex());
}
// mRenderer.getSeriesRendererAt(seriesSelection.getPointIndex()).setHighlighted(true);
pieChartView.repaint();
String selectedtitle= mSeries.getCategory(seriesSelection.getPointIndex());
Toast.makeText(
context,
"您选择的是" + selectedtitle + " ," + " 百分比为 "
+ NumberFormat.getPercentInstance().format(seriesSelection.getValue()),
Toast.LENGTH_SHORT).show();
}
}
});
}
private int getRandomColor()
{// 分别产生RBG数值
Random random = new Random();
int R = random.nextInt(255);
int G = random.nextInt(255);
int B = random.nextInt(255);
return Color.rgb(R, G, B);
}
public int getLegendTextSize()
{
return legendTextSize;
}
public void setLegendTextSize(int legendTextSize)
{
this.legendTextSize = legendTextSize;
}
public int getLegendHeight()
{
return legendHeight;
}
public void setLegendHeight(int legendHeight)
{
this.legendHeight = legendHeight;
}
public int getLabelColor()
{
return labelColor;
}
public void setLabelColor(int labelColor)
{
this.labelColor = labelColor;
}
public int getTitleSize()
{
return titleSize;
}
public void setTitleSize(int titleSize)
{
this.titleSize = titleSize;
}
public Map<String, Double> getDataMaps()
{
return dataMaps;
}
public void setDataMaps(Map<String, Double> dataMaps)
{
this.dataMaps = dataMaps;
}
public String getPieTitle()
{
return pieTitle;
}
public void setPieTitle(String pieTitle)
{
this.pieTitle = pieTitle;
}
}
}
android 使用AChartEngine 饼图的实现的更多相关文章
- Android AChartEngine 饼图渐变效果
二话不说,先上图 核心代码如下: private void initLabelChat(View rootView) { NumberFormat nf = new DecimalFormat(&qu ...
- 【Android】achartengine的柱状图和饼状图的使用
本文介绍了android中如何使用achartengine绘制饼图和柱状图,请分别尝试饼图和柱状图,曲线图. 先看效果图: 先看看获取数据: Workbook workbook = Workbook. ...
- Android图表AChartEngine
很多时候项目中我们需要对一些统计数据进行绘制表格,更多直观查看报表分析结果.基本有以下几种方法: 1:可以进行android api进行draw这样的话,效率比较低 2:使用开源绘表引擎,这样效率比较 ...
- Android使用AchartEngine绘制曲线图
1.在布局文件中加入LinearLayout布局,如下: <LinearLayout android:id="@+id/chart" android:orientation= ...
- Android 自定义View - 饼图
最近有看到一个自定义等分圆的View,自己尝试做了一个类似的,效果图如下图(1)所示: 图(1) 实现方法:自定义View-ColorCircle,需要的知道的值有圆的半径,等分个数以及扇形颜色. / ...
- android使用achartengine 实现折线图
折线图的实现分为下边几个步骤: 1.第一步:数据的准备 XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset(); XYSeri ...
- Android开发学习之路--图表实现(achartengine/MPAndroidChart)之初体验
已经有一段时间没有更新博客了,在上周离开工作了4年的公司,从此不再安安稳稳地工作了,更多的是接受挑战和实现自身价值的提高.离开了嵌入式linux,从此拥抱移动互联网,也许有点为时已晚,但是相信通过 ...
- android 第三方 图表
1.XCL-Charts 直接利用Canvas api画出图形,各有好处. XCL-Chart尽量把图的绘制逻辑封装在类中,而把绘制相关的各 个元素开放出来,目的是在保证开发效率的同时,给程序员足够多 ...
- android highcharts 柱状图例子
android提供achartengine api 只能做简单的,如果是复杂的图表,个人的想法结合highcharts来完成:减小工作量,官方提供的例子也非常丰富. 通过android webview ...
随机推荐
- bzoj 2770 堆的中序遍历性质
我们知道二叉搜索树的中序遍历是一个已经排好序的序列,知道序列我们无法确定树的形态(因为有多种). 但是,Treap如果告诉我们它的关键字以及权值,那么就可以唯一确定树的形态(Treap的O(logn) ...
- 内功心法 -- java.util.LinkedList<E> (1)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- python开发_count()
python中的count()函数,从字面上可以知道,他具有统计功能 下面来看看具体的demo: 功能:读取一个文件'c:\\test.txt',统计出该文件中出现字符'a'的次数 #python o ...
- 函数调用过程中,函数参数的入栈顺序,why?
C语言函数参数入栈顺序为从右至左.具体原因为:C方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数.通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底.除非知道参数个数,否则是无法通 ...
- Web前端面试题小集
一.一个页面上两个div左右铺满整个浏览器,要保证左边的div一直为100px,右边的div跟随浏览器大小变化(比如浏览器为500,右边div为400,浏览器为900,右边div为800),请写出大概 ...
- Objective-C-类(static)方法、实例方法、overwrite(覆写)、属性(property)复习
先来定义一个Human父类 定义部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // // Human.h // OOP // // ...
- NHibernate 3 Beginner's Guide
前言 这一章是一个完整的NHibernate的Simple,原文中用Fluent NHibernate做映射,但我使用NHibernate3.2版本,所以3.2的Conformist代替Fluent ...
- win7 系统装SQLServer2000 成功
昨天在win7上装SQLServer数据库,写一下体会.首先,如果以前安装的话,要删除干净.我也找了半天的网络资料.1.把原来SQLServer的安装目录 C:\Program Files\Micro ...
- mysql知识点(二)
1.什么叫聚集索引和非聚集索引? 答: 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序. 聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规 ...
- 【docker】【redis】1.docker安装redis【单点redis服务】
1.首先确定 需要在docker上拉取redis的哪个版本的镜像 [由于使用了aliyun的源,并且加速器也是用的阿里云的加速器,所以直接在阿里云开发者平台上找redis的镜像有哪些版本是再好不过了, ...