欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MPAndroidChart的使用:饼图

程序员文章站 2022-06-30 14:14:11
...

效果图如下:
MPAndroidChart的使用:饼图
本图使用AndroidMPChart制作,要使用AndroidMPChart,首先要添加远程依赖,或者将AndroidMPChart的jar包导入到AndroidStudio中。

这里我就介绍一下如何添加远程依赖。

1、 在Project目录下的build.gradle中添加如下所示的代码:

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

2、在app目录下的build.gradle中的dependencies闭包下添加如下代码:

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

xml布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

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

</LinearLayout>

java代码:

public class PieChartActivity extends AppCompatActivity {

    private PieChart pieChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 去除状态栏
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_pie_chart);
        // 初始化饼图
        initPieChart();
    }

    private void initPieChart() {
        pieChart = findViewById(R.id.pie_chart);
        pieChart.getDescription().setEnabled(false); // 不显示描述
        pieChart.setDrawHoleEnabled(false); // 不显示饼图中间的空洞
        pieChart.setRotationEnabled(false); // 不允许饼图旋转
        pieChart.setDrawEntryLabels(false); // 不在饼图中显示标签
        pieChart.setExtraOffsets(20, 20, 20, 20); // 设置饼图的偏移量,类似于内边距 ,设置视图窗口大小
        setLegend(); // 设置图例
        setData(); // 为饼图设置数据
    }

    private void setData() {
        List<PieEntry> pieEntries = new ArrayList<>();
        // 准备饼图中要显示的数据
        pieEntries.add(new PieEntry(34.1f, "水果"));
        pieEntries.add(new PieEntry(65.5f, "蔬菜"));
        // 把准备好的数据统一进行格式设置
        PieDataSet pieDataSet = new PieDataSet(pieEntries, "");
        // 设置饼图各部分的颜色
        pieDataSet.setColors(Color.parseColor("#F7F709"), Color.parseColor("#1AE61A"));
        // 设置饼图中数据显示的格式
        pieDataSet.setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                // 此处的value就是PieEntry()中第一个参数的value
                if (value < 40) {
                    return "水果:" + value + "%";
                } else {
                    return "蔬菜:" + value + "%";
                }
            }
        });
        pieDataSet.setValueTextSize(20f);
        pieDataSet.setSliceSpace(8f); // 设置扇区中的间隔
        // 设置饼图显示的线
        pieDataSet.setValueLineColor(Color.BLACK);
        pieDataSet.setValueLinePart1OffsetPercentage(80); // 第一条线离圆心的百分比
        pieDataSet.setValueLinePart1Length(0.5f); // 第一条线长度
        pieDataSet.setValueLinePart2Length(0.7f); // 第二条线长度
        pieDataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); // 设置值显示的位置

        PieData pieData = new PieData(pieDataSet);
        pieChart.setData(pieData); // 为饼图设置数据
    }

    private void setLegend() {
        Legend legend = pieChart.getLegend();
        legend.setFormSize(15f); // 图例的图形大小
        legend.setTextSize(15f); // 图例的文字大小
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); // 显示的位置水平居中
        legend.setDrawInside(true); // 设置图例在图中
        legend.setYOffset(5); // 设置图例在垂直方向的偏移量
    }
}

这里指出一个常用的属性pieChart.setHoleRadius(60f); 设置中间空洞的半径,这个值越大,中间空洞也就越大。