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 饼图的实现的更多相关文章

  1. Android AChartEngine 饼图渐变效果

    二话不说,先上图 核心代码如下: private void initLabelChat(View rootView) { NumberFormat nf = new DecimalFormat(&qu ...

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

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

  3. Android图表AChartEngine

    很多时候项目中我们需要对一些统计数据进行绘制表格,更多直观查看报表分析结果.基本有以下几种方法: 1:可以进行android api进行draw这样的话,效率比较低 2:使用开源绘表引擎,这样效率比较 ...

  4. Android使用AchartEngine绘制曲线图

    1.在布局文件中加入LinearLayout布局,如下: <LinearLayout android:id="@+id/chart" android:orientation= ...

  5. Android 自定义View - 饼图

    最近有看到一个自定义等分圆的View,自己尝试做了一个类似的,效果图如下图(1)所示: 图(1) 实现方法:自定义View-ColorCircle,需要的知道的值有圆的半径,等分个数以及扇形颜色. / ...

  6. android使用achartengine 实现折线图

    折线图的实现分为下边几个步骤: 1.第一步:数据的准备 XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset(); XYSeri ...

  7. Android开发学习之路--图表实现(achartengine/MPAndroidChart)之初体验

      已经有一段时间没有更新博客了,在上周离开工作了4年的公司,从此不再安安稳稳地工作了,更多的是接受挑战和实现自身价值的提高.离开了嵌入式linux,从此拥抱移动互联网,也许有点为时已晚,但是相信通过 ...

  8. android 第三方 图表

    1.XCL-Charts 直接利用Canvas api画出图形,各有好处. XCL-Chart尽量把图的绘制逻辑封装在类中,而把绘制相关的各 个元素开放出来,目的是在保证开发效率的同时,给程序员足够多 ...

  9. android highcharts 柱状图例子

    android提供achartengine api 只能做简单的,如果是复杂的图表,个人的想法结合highcharts来完成:减小工作量,官方提供的例子也非常丰富. 通过android webview ...

随机推荐

  1. 中国剩余定理 hdu 1573 X问题

    HDU 1573 X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  2. 四、python之 if while for

    一.if条件判断 if 条件判断: 逻辑操作…… …… else: 逻辑操作…… 其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. ...

  3. [转]Eclipse 项目转移到Android Studio遇到的问题

    1.Android Studio直接导入项目是copy原项目的,无法纳入代码管控 解决方案: 英文地址:http://developer.android.com/sdk/installing/migr ...

  4. ExtJs2.0学习系列(12)--Ext.TreePanel之第一式

    今天开始,我们就开始一起学习TreePanel了,道个歉,上篇的代码很乱阿. 我总是喜欢用最简单的例子开始,去理解最基本的使用方法,减少对i后面高级使用的干扰! TreePanel是继承自Panel, ...

  5. HTTP Error 404.2 - Not Found The page you are requesting cannot be served because of the ISAPI and CGI Restriction list settings on the Web server(转)

    今天公司的同事問我,為什麼同一支程式在自己的電腦OK,部署到Server上會出現下面的錯誤 我想,沒有錯啊~ 我在這台Server所部署的程式一向都是OK的 看了錯誤的Error page, 發現是I ...

  6. 简单的python2.7基于bs4和requests的爬虫

    python的编码问题比较恶心. decode解码encode编码 在文件头设置 # -*- coding: utf-8 -*-让python使用utf8. # -*- coding: utf- -* ...

  7. [转] NSMapTable 不只是一个能放weak指针的 NSDictionary

    NSMapTable 不只是一个能放weak指针的 NSDictionary NSMapTable是早在Mac OS X 10.5(Leopard)的引入集合类.乍一看,这似乎是作为一个替换NSDic ...

  8. 从两个TIMESTAMP中获取时间差(秒)

    When you subtract two variables of type TIMESTAMP, you get an INTERVAL DAY TO SECOND which includes ...

  9. HDFS命令行工具

    1. hadoop fs 帮助信息 hadoop fs 使用help选项可以获得某个具体命令的详细说明: hadoop fs -help ls 2. 列出HDFS文件和目录 hadoop fs -ls ...

  10. T-SQL经典语句(SQL server)

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...