您的位置:首页 > 移动开发 > Android开发

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

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

       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.ge
4000
t(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();
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  安卓 环状图