MPAndroidChart饼状图统计使用

2019-08-17  本文已影响0人  程序猿的小生活

1.app目录下中添加依赖


在Project即工程下的build.gradle文件里添加
maven { url "https://jitpack.io" }
添加下来是这个样子的:
allprojects {
  repositories {
      jcenter()
      maven { url "https://jitpack.io" }
      google()
  }
}
然后在项目下的build.gradle文件里添加
dependencies {
 implementation 'com.github.PhilJay:MPAndroidChart:v2.2.5'//可能有新版本,当前使用的是v2.2.5
}

2.在layout布局文件中进行控件的布局

 <com.github.mikephil.charting.charts.PieChart
                android:id="@+id/huifuchart"
                android:layout_width="match_parent"
                android:layout_height="350dp" />//高度设置注意下:不要写成wrap_content 亲测这样写不会显示饼状图
``
3.设置图表数据
```java
 private void setPieChartData(PieChart pieChart,List<yueduqingkuangben> datas) {

     /*   Set set = pieValues.entrySet();
        Iterator it = set.iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            entries.add(new PieEntry(Float.valueOf(entry.getValue().toString()), entry.getKey().toString()));
        }*/
        ArrayList<String> xValues = new ArrayList<String>(); // xVals用来表示每个饼块上的内容
        ArrayList<Entry> yValues = new ArrayList<Entry>(); // yVals用来表示封装每个饼块的实际数据
        ArrayList<Integer> colors = new ArrayList<Integer>();
        int size = datas.size();
        yueduqingkuangben data;
        float quarterly;
        for (int i = 0; i < size; i++) {
            data = datas.get(i);
            xValues.add(data.name);
            quarterly = Integer.parseInt(data.value);
            yValues.add(new Entry(quarterly, i));
            colors.add(Color.parseColor(data.color));

        }


        PieDataSet dataSet = new PieDataSet( yValues, "");

        dataSet.setSliceSpace(5f);//设置饼块之间的间隔
        dataSet.setSelectionShift(5f);//设置饼块选中时偏离饼图中心的距离
        dataSet.setColors(PIE_COLORS);//设置饼块的颜色

        //设置数据显示方式有见图
        dataSet.setValueLinePart1OffsetPercentage(80f);//数据连接线距图形片内部边界的距离,为百分数
        dataSet.setValueLinePart1Length(0.3f);
        dataSet.setValueLinePart2Length(0.4f);
        dataSet.setValueLineColor(Color.YELLOW);//设置连接线的颜色
        dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
        PieData pieData = new PieData(xValues,dataSet);
        pieData.setValueFormatter(new MyValueFormatter("次"));//是否显示百分号
       // pieData.setValueFormatter(new DefaultValueFormatter(1,"次"));//自己修改的方法
       // pieData.setValueFormatter(new PercentFormatter());
        pieData.setValueTextSize(11f);
        pieData.setValueTextColor(Color.DKGRAY);
        pieChart.setData(pieData);
        pieChart.highlightValues(null);
        pieChart.setDescription(null);
        pieChart.invalidate();
    }

4.设置图表参数


    public void setPieChart(PieChart pieChart, List<yueduqingkuangben> datas, String title, boolean showLegend) {
        pieChart.setUsePercentValues(false);//设置使用百分比(后续有详细介绍)
      //  pieChart.getDescription().setEnabled(false);//设置描述
        pieChart.setExtraOffsets(15, 10, 15, 10); //设置边距
        pieChart.setDragDecelerationFrictionCoef(0.95f);//设置摩擦系数(值越小摩擦系数越大)
        pieChart.setCenterText(title);//设置环中的文字
        pieChart.setRotationEnabled(true);//是否可以旋转
        pieChart.setHighlightPerTapEnabled(true);//点击是否放大
        pieChart.setCenterTextSize(22f);//设置环中文字的大小
        pieChart.setDrawCenterText(true);//设置绘制环中文字
        pieChart.setRotationAngle(120f);//设置旋转角度
        pieChart.setTransparentCircleRadius(61f);//设置半透明圆环的半径,看着就有一种立体的感觉
        //这个方法为true就是环形图,为false就是饼图
        pieChart.setDrawHoleEnabled(true);
        //设置环形中间空白颜色是白色
        pieChart.setHoleColor(Color.WHITE);
        //设置半透明圆环的颜色
        pieChart.setTransparentCircleColor(Color.WHITE);
        //设置半透明圆环的透明度
        pieChart.setTransparentCircleAlpha(110);

        //图例设置
        Legend legend = pieChart.getLegend();
        if (showLegend) {
            legend.setEnabled(true);//是否显示图例
            legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);//图例相对于图表横向的位置
            legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);//图例相对于图表纵向的位置
            legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);//图例显示的方向
            legend.setDrawInside(false);
            legend.setDirection(Legend.LegendDirection.LEFT_TO_RIGHT);
        } else {
            legend.setEnabled(false);
        }

        //设置饼图数据
        setPieChartData(pieChart, datas);

        pieChart.animateX(1500, Easing.EasingOption.EaseInOutQuad);//数据显示动画

    }

5.方法调用

 ArrayList<yueduqingkuangben> yueduchartlist = new ArrayList<yueduqingkuangben>();
              yueduqingkuangben yue = new yueduqingkuangben();
                                int ceshishuju = 2;
                                yue.code = "xx";
                                yue.name = "测试";
                                yue.value = String.valueOf(ceshishuju);
                                yue.color = "#FF3B95DA";
                                if (ceshishuju != 0) {
                                    yueduchartlist.add(yue5);
                                }
                               /* PieData mPieDataHp2 = getPieData(yueduchartlist);
                                showChart(huifuchart, mPieDataHp2, "未读");*/
                                setPieChart(huifuchart,  yueduchartlist, "", false);

附加:(1)yueduqingkuangben

public class yueduqingkuangben  {

    public  String   code;            // 0未阅  1已阅
    public  String   name;           //名字
    public  String   value;          //数量
    public  String   color;
}

(2)原生的MPAndroidChart数据是带%,如果不需要%可以自定义一个类实现ValueFormatter 接口 例如:

public class MyValueFormatter implements ValueFormatter {
    private DecimalFormat mFormat;
    public  MyValueFormatter(String myUnit){
        setValueFormatter(myUnit);
    }
    public void  setValueFormatter(String myUnit) {

        mFormat = new DecimalFormat("###,###,###,##" + myUnit);
    }
    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
        return mFormat.format(value);
    }
}

并在方法中设置
 pieData.setValueFormatter(new MyValueFormatter("次"));//是否显示百分号 注意setValueFormatter这个只能设置一次,设置多了可能导致此方法被覆盖

(3)效果图:


IMG_20190817_100404.jpg
上一篇 下一篇

猜你喜欢

热点阅读