MPAndroidChart---饼状图PieChart

趁热打铁,今天接着练习下图表的饼状图,依旧抽取个管理类

public class PieChartUtils {
    private static final String TAG = "PieChartUtils";
    private PieChart pieChart;
    private  Legend legend;
    public PieChartUtils(PieChart pieChart){
        this.pieChart = pieChart;
        initSetting();
    }

    /**
     常用设置
     */
    private void initSetting() {
        pieChart.setHoleColor(Color.TRANSPARENT);//设置中间的颜色
        pieChart.setHoleRadius(30f);//设置饼状的半径
        pieChart.setTransparentCircleRadius(54f);//设置半透明圈的半径
        pieChart.getDescription().setText("");//设置描述
        pieChart.setDrawCenterText(true);//设置饼状中间的文字是否显示
        pieChart.setDrawHoleEnabled(true);
        pieChart.setCenterText("家庭花费");//设置饼状中间文字
        pieChart.setCenterTextColor(Color.RED);
        pieChart.setCenterTextSize(16);
        pieChart.setRotationAngle(90);//设置初始旋转角度
        pieChart.setRotationEnabled(true);//设置是否可以手动旋转
        pieChart.setUsePercentValues(true);//设置是否显示成百分比

        legend = pieChart.getLegend();
        legend.setEnabled(true);//设置是否显示比例图
        legend.setForm(Legend.LegendForm.CIRCLE); //设置比例图样式 圆
        legend.setTextColor(Color.RED);

       //设置比例图位置
        legend.setOrientation(Legend.LegendOrientation.VERTICAL);
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        pieChart.animateXY(1000,1500);//设置xy轴的动画
    }

    /**
     * 设置数据
     * @param pieEntries 数据
     * @param colors 每一块显示的颜色
     * @param lableColor  显示在每一块中文字的颜色
     */
    public void setPieData(List<PieEntry> pieEntries,int[] colors,int lableColor ){
        PieDataSet pieDataSet = new PieDataSet(pieEntries,"");
        pieDataSet.setColors(colors);
        pieDataSet.setSelectionShift(10f);//设置选中后弹出的比例
        pieDataSet.setSliceSpace(0);//设置间距
        pieDataSet.setValueTextColor(lableColor); //设置显示百分比数据的颜色
        pieDataSet.setValueTextSize(16);//设置显示百分比数据的大小
        pieDataSet.setValueLineVariableLength(true);
        pieDataSet.setValueLineColor(lableColor);
        pieDataSet.setValueLinePart1Length(0.4f);
        pieDataSet.setValueLinePart2Length(0.2f);
        pieDataSet.setYValuePosition( PieDataSet.ValuePosition.OUTSIDE_SLICE);
        pieDataSet.setXValuePosition( PieDataSet.ValuePosition.OUTSIDE_SLICE);
        pieDataSet.setValues(pieEntries);
        pieChart.setEntryLabelColor(lableColor);
        pieDataSet.setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                int values = (int)value;
                return values+"%";
            }
        });
        PieData pieData = new PieData(pieDataSet);
        pieChart.setData(pieData);

默认的图例是不显示数据的,在3.0后有了自定义的方法

 //自定义的图例
        String lebals = "";
        LegendEntry[] legendEntries = new LegendEntry[pieDataSet.getEntryCount()];
        for (int i = 0;i<pieDataSet.getEntryCount();i++){
            PieEntry entryForIndex = pieDataSet.getEntryForIndex(i);
            lebals = entryForIndex.getLabel()+"  "+entryForIndex.getValue();
            LegendEntry legendEntry = new LegendEntry(lebals,Legend.LegendForm.CIRCLE,10,1f,null,colors[i]);
            legendEntries[i] = legendEntry;
        }
        legend.setCustom(legendEntries);

在Activity中调用的时候

 ArrayList<PieEntry> pie = new ArrayList<PieEntry>();
        for (int i = 0; i<3; i++){
            //new PieEntry中第一个参数 将每一份的数据传进去,会自动算出每一份所占的百分比,展示在饼图上
            //第二个参数 是直接显示在饼图上的
            pie.add(new PieEntry(y[i],ss[i]));
        }
        pieChartUtils.setPieData(pie,pieColors,Color.GRAY);

猜你喜欢

转载自my.oschina.net/fbf8866/blog/1809616