美文网首页
MPAndroidChart(7)——饼状图 PieChart的

MPAndroidChart(7)——饼状图 PieChart的

作者: 古早味蛋糕 | 来源:发表于2022-11-15 19:27 被阅读0次

本文相关代码

1.1 MPAndroidChart获取

Github 地址:https://github.com/PhilJay/MPAndroidChart

依赖:
Project 的build.gradle文件中添加


1.png

Project 的settings.gradle文件中添加


2.png

然后在 module中的build,gradle 中添加

implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'

然而大多情况下,我们会根据自己的需求自定义MPAndroidChart库,则需要下载源码并将MPChartLib引入自己的项目中。

2.代码具体实现

2.1 布局XML

<com.github.mikephil.charting.charts.PieChart
    android:id="@+id/apc_pie_chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

2.2 Activity具体实现

  1. 初始化PieChart
private void initPieChart() {
    pieChart.setUsePercentValues(true); //是否显示百分比(经测试没什么用)
    Description description = pieChart.getDescription();
    description.setText(""); //设置描述的文字,默认在右下角
    pieChart.setHighlightPerTapEnabled(true); //设置piecahrt图表点击Item高亮是否可用
    pieChart.animateX(0);
    pieChart.setDrawEntryLabels(false); // 设置entry中的描述label是否画进饼状图中
    pieChart.setEntryLabelColor(Color.WHITE);//设置该文字是的颜色
    pieChart.setEntryLabelTextSize(10f);//设置该文字的字体大小
    pieChart.setDrawHoleEnabled(true);//设置圆孔的显隐,也就是内圆
    pieChart.setHoleRadius(42f);//设置内圆的半径。外圆的半径好像是不能设置的,改变控件的宽度和高度,半径会自适应。
    pieChart.setHoleColor(Color.WHITE);//设置内圆的颜色
    pieChart.setDrawCenterText(false);//设置是否显示文字
    pieChart.setCenterText("");//设置饼状图中心的文字
    pieChart.setCenterTextSize(10f);//设置文字的消息
    pieChart.setCenterTextColor(Color.RED);//设置文字的颜色
    pieChart.setTransparentCircleRadius(31f);//设置内圆和外圆的一个交叉园的半径,这样会凸显内外部的空间
    pieChart.setTransparentCircleColor(Color.BLACK);//设置透明圆的颜色
    pieChart.setTransparentCircleAlpha(50);//设置透明圆你的透明度
    pieChart.setRotationAngle(20); //设置初始旋转角度
    pieChart.setRotationEnabled(false); //设置是否可以拖动旋转
    pieChart.setExtraOffsets(10, 10, 10, 15); //设置饼状图的初始位置偏移
   //        Legend legend = pieChart.getLegend();//图例
   //        legend.setEnabled(true);//是否显示(不显示的话,图例可以自己自定义控件)
}
  1. 自定义Legend图例
private void initLegend() {
    Legend legend = pieChart.getLegend();//获取图例
    legend.setEnabled(true);//是否显示图例,false则以下配置不生效
    legend.setVerticalAlignment(Legend.LegendVerticalAlignment.CENTER);//设置图例和饼状图竖向对齐
    legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);//设置图例和饼状图横线对齐
    //以下偏移量设置可以多设几次不同值,慢慢调试最终效果
    legend.setYOffset(-30f); //图例的Y轴偏移量
    legend.setXOffset(15f); //图例的X轴偏移量
    pieChart.setExtraOffsets(10, 10, 20, 10); //饼状图的偏移量
    legend.setYEntrySpace(10);//不同图例的Y轴间距
    legend.setOrientation(Legend.LegendOrientation.VERTICAL);//设置图例的排列走向:vertacal相当于分行
    legend.setForm(Legend.LegendForm.SQUARE);//设置图例的图形样式,默认为圆形
    legend.setFormSize(15f);//设置图例的大小
    legend.setTextSize(15f);//设置图注的字体大小
    legend.setTextColor(getResources().getColor(R.color.black)); //图例的文字颜色
    legend.setFormToTextSpace(5f);//设置图例到饼状图的距离
    legend.setDrawInside(false); //设置图例是否绘制在内部
    legend.setWordWrapEnabled(false);//设置图列换行(注意使用影响性能,仅适用legend位于图表下面),我也不知道怎么用的
}

3.添加数据并显示

  /**
 * 配置数据
 */
private void initData() {
    ArrayList<PieEntry> pieEntries = new ArrayList<>();
    String a = null;
    String b = null;
    String c = null;
    String d = null;
    a = "40%";
    b = "30%";
    c = "20%";
    d = "10%";
    //去除最后一位百分号
    a = a.substring(0, a.length() - 1);
    b = b.substring(0, b.length() - 1);
    c = c.substring(0, c.length() - 1);
    d = d.substring(0, d.length() - 1);
    pieEntries.add(new PieEntry(Float.parseFloat(a), "比亚迪/BYD" + a));
    pieEntries.add(new PieEntry(Float.parseFloat(b), "特斯拉/Tesla" + b));
    pieEntries.add(new PieEntry(Float.parseFloat(c), "吉利/GEELY" + c));
    pieEntries.add(new PieEntry(Float.parseFloat(d), "宝马/BMW" + d));
    PieDataSet pieDataSet = new PieDataSet(pieEntries, null);
    pieDataSet.setSliceSpace(0f);//设置每块饼之间的空隙
    pieDataSet.setSelectionShift(0f);//点击某个饼时拉长的宽度
    pieDataSet.setColors(getResources().getColor(R.color.teal_200), getResources().getColor(R.color.teal_700),
            getResources().getColor(R.color.purple_200), getResources().getColor(R.color.purple_500)); //设置饼状图不同数据的颜色
    PieData pieData = new PieData(pieDataSet);
    pieData.setDrawValues(true);            //设置是否显示数据实体(百分比,true:以下属性才有意义)
    pieData.setValueTextColor(Color.WHITE);  //设置所有DataSet内数据实体(百分比)的文本颜色
    pieData.setValueTextSize(12f);          //设置所有DataSet内数据实体(百分比)的文本字体大小
    pieData.setValueFormatter(new ValueFormatter() { //格式化数据,并加上百分号
        @Override
        public String getFormattedValue(float value) {
            if (value == 0) {
                return "";
            } else {
                BigDecimal b = new BigDecimal(String.valueOf(value));
                float num = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
                return num + "%";
            }
        }
    });
    pieChart.setData(pieData);
    pieChart.highlightValues(null); //设置高亮
    pieChart.invalidate(); //将图表重绘以显示设置的属性和数据
}

效果图


3.png

相关文章

网友评论

      本文标题:MPAndroidChart(7)——饼状图 PieChart的

      本文链接:https://www.haomeiwen.com/subject/plcrxdtx.html