MPAndroidChart饼状图统计使用

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • 秋水云边上,霏雨绵未休。 榕荫游足处,俯望客家楼。 鸡鸣应犬吠,稻香说丰收。 闽南乡土宴,楼主邀客留。
    埂中鸣阅读 324评论 0 5
  • 陪家人到医院做检查,人很多,需等待。座椅上坐满了病号,走廊里也站满了陪同家属,男女老少,如同集会。 医生喊...
    海风轻吹阅读 532评论 0 16
  • 一年没回家最想念家里的厨房了。住在宿舍里,用电限功率,非常不方便,每次吃到好吃的都会想着自己应该怎么做这道菜,计划...
    千面小爷阅读 109评论 0 0
  • 胖姑娘二十岁了,这让胖姑娘感到慌张,怎么就要二十岁了呢?胖姑娘想了很久也都没想明白,这日子真的是一天天就过去了,很...
    阿蛮g阅读 508评论 2 5