package com.qiuzhping.achart; import java.text.NumberFormat; 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.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.Toast; /** * @项目名称:AChart * @类名称:PieChartBuilder * @作者:Qiuzhping * @时间:2014-1-15下午11:20:48 * @作用 :构建饼图,并产生与用户交互,点击对应的区域能正确显示信息 */ public class PieChartBuilder extends Activity { private static int[] COLORS = new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.MAGENTA, Color.CYAN, Color.YELLOW, Color.DKGRAY }; double data[] = new double[] { 20, 30, 40, 50, 60, 70, 80, 90, 100 }; private CategorySeries mSeries = new CategorySeries("");// PieChart的DataSet // 其实就是一些键值对,跟Map使用方法差不多 private DefaultRenderer mRenderer = new DefaultRenderer();// PieChart的主要描绘器 private GraphicalView mChartView;// 用来显示PieChart 需要在配置文件Manifest中添加 // <activity // android:name="org.achartengine.GraphicalActivity" // /> private LinearLayout mLinear; private static double VALUE = 0;// 总数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.xy_chart); mLinear = (LinearLayout) findViewById(R.id.chart); mLinear.setBackgroundColor(Color.BLACK); mRenderer.setZoomButtonsVisible(true);// 显示放大缩小功能按钮 mRenderer.setStartAngle(180);// 设置为水平开始 mRenderer.setDisplayValues(true);// 显示数据 mRenderer.setFitLegend(true);// 设置是否显示图例 mRenderer.setLegendTextSize(10);// 设置图例字体大小 mRenderer.setLegendHeight(10);// 设置图例高度 mRenderer.setChartTitle("饼图示例");// 设置饼图标题 for (int i = 0; i < data.length; i++) VALUE += data[i]; for (int i = 0; i < data.length; i++) { mSeries.add("示例 " + (i + 1), data[i] / VALUE);// 设置种类名称和对应的数值,前面是(key,value)键值对 SimpleSeriesRenderer renderer = new SimpleSeriesRenderer(); if (i < COLORS.length) { renderer.setColor(COLORS[i]);// 设置描绘器的颜色 } else { renderer.setColor(getRandomColor());// 设置描绘器的颜色 } renderer.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比 mRenderer.setChartTitleTextSize(14);// 设置饼图标题大小 mRenderer.addSeriesRenderer(renderer);// 将最新的描绘器添加到DefaultRenderer中 } if (mChartView == null) {// 为空需要从ChartFactory获取PieChartView mChartView = ChartFactory.getPieChartView(getApplicationContext(), mSeries, mRenderer);// 构建mChartView mRenderer.setClickEnabled(true);// 允许点击事件 mChartView.setOnClickListener(new View.OnClickListener() {// 具体内容 @Override public void onClick(View v) { SeriesSelection seriesSelection = mChartView .getCurrentSeriesAndPoint();// 获取当前的类别和指针 if (seriesSelection == null) { Toast.makeText(getApplicationContext(), "您未选择数据", Toast.LENGTH_SHORT).show(); } else { for (int i = 0; i < mSeries.getItemCount(); i++) { mRenderer.getSeriesRendererAt(i) .setHighlighted( i == seriesSelection .getPointIndex()); } mChartView.repaint(); Toast.makeText( getApplicationContext(), "您选择的是第" + (seriesSelection .getPointIndex() + 1) + " 项 " + " 百分比为 " + NumberFormat .getPercentInstance() .format(seriesSelection .getValue()), Toast.LENGTH_SHORT).show(); } } }); mLinear.addView(mChartView, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } else { mChartView.repaint(); } } 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); } }