Android图表通过MPAndroidChart实现饼状图,详细解释

在接触第一个安卓项目的时候,需要使用到饼状图统计数据,我一共用了三种方式,个人觉得MPAndroidChart非常好用,在这里详细说一下
其他方式传送门
(1)AChartEngine:
(2)Canvas绘制:https://www.meiwen.com.cn/subject/hopnwxtx.html canvas基本操作:(3)MPAndroidChart使用 这个地址详细介绍MPAndroidChart的使用,只不过版本不一样,操作也有许多不一样,一些设置因为版本不同已经过时,但我最初是参照这个写的,大家也可以去学习下
Canvas相对比较复杂,AChartEngine比较简单,甚至比MPAndroidChart更简单,但实现的效果不如MPAndroidChart好,推荐使用MPAndroidChart比较好上手

先看下效果图

android 饼图图例的位置 安卓饼状图_饼状图

(一)首先引入依赖

project的gradle下

allprojects {
    repositories {
        google()
        maven { url "https://jitpack.io" }//加上这句话
        jcenter()
    }
}

module的gradle下

dependencies {
	//在原来的基础加上如下依赖
   implementation 'com.github.PhilJay:MPAndroidChart:v3.0.0'
}

(二)布局文件

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

    <com.github.mikephil.charting.charts.PieChart
        android:id="@+id/mPieChart"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:layout_marginTop="150dp"
        android:layout_weight="1"/>

</LinearLayout>

(三)Activity类

在这里基本上每个配置我都写了注释,如果还有想了解其他属性的
可参考:

public class PieChartActivity extends AppCompatActivity  {

    private PieChart mPieChart;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pie_chart);
        /*折线饼状图*/
        //1.初始化组件
        mPieChart = (PieChart) findViewById(R.id.mPieChart);

        mPieChart.setUsePercentValues(true); //设置是否使用百分值,默认不显示
        mPieChart.getDescription().setEnabled(false);
        mPieChart.setDragDecelerationFrictionCoef(0.95f);

        //是否设置中心文字
        mPieChart.setDrawCenterText(true);
        //绘制中间文字
        SpannableString sp = new SpannableString("个人剖析图");
        mPieChart.setCenterText(sp);
        mPieChart.setExtraOffsets(20.f, 0.f, 20.f, 0.f);

        //设置是否为实心图,以及空心时 中间的颜色
        mPieChart.setDrawHoleEnabled(true);
        mPieChart.setHoleColor(Color.WHITE);

        //设置圆环信息
        mPieChart.setTransparentCircleColor(Color.WHITE);//设置透明环颜色
        mPieChart.setTransparentCircleAlpha(110);//设置透明环的透明度
        mPieChart.setHoleRadius(55f);//设置内圆的大小
        mPieChart.setTransparentCircleRadius(60f);//设置透明环的大小

        mPieChart.setRotationAngle(0);
        // 触摸旋转
        mPieChart.setRotationEnabled(true);
        //选中变大
        mPieChart.setHighlightPerTapEnabled(true);

        //模拟数据
        ArrayList<PieEntry> entries = new ArrayList<PieEntry>();
        entries.add(new PieEntry(80, "颜值"));
        entries.add(new PieEntry(100, "智慧"));
        entries.add(new PieEntry(50, "身材"));
        entries.add(new PieEntry(50, "性格"));
        entries.add(new PieEntry(20, "声音"));

        //设置数据
        setData(entries);

        //默认动画
        mPieChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);

        //设置图例
        Legend l = mPieChart.getLegend();
        //设置显示的位置,低版本用的是setPosition();
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
        //设置是否显示图例
        l.setDrawInside(false);
        l.setEnabled(true);

        // 输入图例标签样式
        mPieChart.setEntryLabelColor(Color.BLUE);
        mPieChart.setEntryLabelTextSize(18f);

    }

    //设置数据
    private void setData(ArrayList<PieEntry> entries) {
        PieDataSet dataSet = new PieDataSet(entries, "");
        //设置个饼状图之间的距离
        dataSet.setSliceSpace(0f);
        //颜色的集合,按照存放的顺序显示
        ArrayList<Integer> colors = new ArrayList<Integer>();
        for (int c : ColorTemplate.VORDIPLOM_COLORS)
            colors.add(c);
        for (int c : ColorTemplate.JOYFUL_COLORS)
            colors.add(c);
        for (int c : ColorTemplate.COLORFUL_COLORS)
            colors.add(c);
        for (int c : ColorTemplate.LIBERTY_COLORS)
            colors.add(c);
        for (int c : ColorTemplate.PASTEL_COLORS)
            colors.add(c);
        colors.add(ColorTemplate.getHoloBlue());
        dataSet.setColors(colors);

        //设置折线
        dataSet.setValueLinePart1OffsetPercentage(80.f);
        //设置线的长度
        dataSet.setValueLinePart1Length(0.3f);
        dataSet.setValueLinePart2Length(0.3f);
        //设置文字和数据图外显示
        dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
        dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);

        PieData data = new PieData(dataSet);
        //百分比设置
        data.setValueFormatter(new PercentFormatter());
        //文字的颜色
        data.setValueTextSize(14f);
        data.setValueTextColor(Color.BLACK);
        mPieChart.setData(data);
        // 撤销所有的亮点
        mPieChart.highlightValues(null);
        mPieChart.invalidate();
    }
}

项目传送门 基本代码就是这些,可以直接使用,有什么问题,评论告诉我,不需要去下载demo,这个链接中还包含了一个简单计算器和简单计时器的demo,有兴趣且有余力的,可以去下载看看