Android中实现环状图的两种方式

        在最近得一个项目里,要做一个数据统计,将数据在环状图上进行展示,并在环图的中间展示用户比较感兴趣的那部分所占的比例。下面简单介绍两种方法实现环状图,当然如果你有更好的实现我们可以互相交流学习。

       1.使用achartengine.jar来实现(环图中间没有文字说明)

      这个jar包的功能相当强大,可实现许多图表。但据我观察,关于环状图的实现介绍在网络上还是有点儿少。由于自己也很少使用这个jar包,最后只好看源码以及官方的demo,根据源官方的demo简单实现了环状图。对于该jar包的使用,本人是个新手,有代码冗余的地方希望大家给予提醒并及时更正。

    AChartEngine是一个免费图表开发库,目前已经发布了4个版本。支持散点图、折线图、饼图、气泡图、柱状图、短棒图等多种图表。Android开发者可以很方便的试用AChartEngine Chart库画出各种图表。

public class CyclicGraphView {
	private Context context;
	private ArrayList values;
	private ArrayList descriptions;
	private int[] colors = new int[] { 0xffa9d86e, 0xff50b8d8, 0xfff9a415,
			0xfffa9c9c, Color.GREEN };

	public CyclicGraphView(Context context, ArrayList values,
			ArrayList descriptions) {
		this.context = context;
		this.values = values;
		this.descriptions = descriptions;
	}

	public View excute() {
		MultipleCategorySeries dataset = buildMultipleCategorySeries("");
		DefaultRenderer renderer = buildCategoryRenderer();
		return ChartFactory.getDoughnutChartView(context, dataset, renderer);
	}

	protected MultipleCategorySeries buildMultipleCategorySeries(String title) {
		MultipleCategorySeries multipleCategorySeries=new MultipleCategorySeries(title);
		Integer total = 0;
		int count=0;
		ArrayList des=new ArrayList();
		ArrayList val=new ArrayList();
		String []precent=new String[values.get(0).length];
		for (int i = 0; i < values.get(0).length; i++) {
			total += (int)values.get(0)[i];
		}
		NumberFormat nft=NumberFormat.getPercentInstance();
		nft.setMaximumFractionDigits(0);
		for (int i = 0; i < values.get(0).length; i++) {
			precent[i]=nft.format(values.get(0)[i]/total)+"";
		}
		String []newprecent=new String[values.get(0).length];
		double []newval=new double[values.get(0).length];
		for(int i=0;i
     2.使用MPChart.jar来实现(环图中间带有文字说明)
     MPAndroidChart 是 Android 系统上一款开源的图表库。目前提供线图和饼图,支持选择、缩放和拖放
public class PieChartView {

	private static int[] colors = new int[] { 0xffa9d86e, 0xff50b8d8,
			0xfff9a415, 0xfffa9c9c, Color.GREEN };
	//private static Typeface tf;

	public static View excute(PieChart pieChart, ArrayList values,
			String text) {
		pieChart.setUsePercentValues(true);//显示成百分比
		pieChart.setDescription("");
		pieChart.setHoleColorTransparent(true);
		pieChart.setHoleRadius(70f); //半径比例
		pieChart.setTransparentCircleColor(Color.WHITE);
		pieChart.setDrawCenterText(true);//饼状图中间添加文字
		pieChart.setCenterTextSize(16);
		/*tf = Typeface.createFromAsset(context.getAssets(), "OpenSans-Regular.ttf");
		pieChart.setCenterTextTypeface(tf);*/
		pieChart.getLegend().setEnabled(false);//不显示说明
		pieChart.setRotationEnabled(false);// 不允许手动旋转 
		pieChart.setCenterText(text);
		pieChart.setCenterTextWordWrapEnabled(true);
		setData(values, pieChart);
		pieChart.setOnTouchListener(new ChartTouchListener(pieChart) {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				return false;
			}
		});
		return pieChart;
	}

	private static void setData(ArrayList datas, PieChart pieChart) {
		// TODO Auto-generated method stub
		ArrayList yVals1 = new ArrayList();
		for (int i = 0; i < datas.size(); i++) {
			yVals1.add(new Entry((float) (datas.get(i)), i));
		}
		ArrayList xVals = new ArrayList();
		for (int i = 0; i < datas.size(); i++) {
			xVals.add("");
		}
		PieDataSet dataSet = new PieDataSet(yVals1, "Election Results");
		dataSet.setSliceSpace(0f);//设置饼状图之间的距离
		dataSet.setSelectionShift(0f);//选中态多出的长度

		// add a lot of colors

		// dataSet.setValueTextSize(0);
		dataSet.setDrawValues(false);
		dataSet.setColors(colors);

		PieData data = new PieData(xVals, dataSet);
		data.setValueFormatter(new PercentFormatter());
		// data.setValueTextSize(11f);
		data.setDrawValues(false);//饼图上不显示文字
		// data.setValueTextColor(Color.WHITE);
		pieChart.setData(data);

		// undo all highlights
		pieChart.highlightValues(null);

		pieChart.invalidate();
	}

}

Android中实现环状图的两种方式_第1张图片

你可能感兴趣的:(Android中实现环状图的两种方式)