Android学习之通过MPAndroidChart实现饼状图,详细解释

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

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

先看下效果图
在这里插入图片描述

(一)首先引入依赖

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类

在这里基本上每个配置我都写了注释,如果还有想了解其他属性的
可参考:https://blog.csdn.net/Honiler/article/details/80073883

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,有兴趣且有余力的,可以去下载看看

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
饼状图是一种常用的数据可视化图表,在Android开发中,可以使用MPAndroidChart库来实现饼状图的绘制。MPAndroidChart是一个功能强大且易于使用的开源图表库,提供了丰富的图表类型和自定义选项。 要在Android项目中使用MPAndroidChart库,首先需要在项目的build.gradle文件中添加依赖: ``` dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } ``` 接下来,在布局文件中添加一个`PieChart`视图: ```xml <com.github.mikephil.charting.charts.PieChart android:id="@+id/pie_chart" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 然后,在代码中获取`PieChart`实例,并设置数据和样式: ```java PieChart pieChart = findViewById(R.id.pie_chart); // 创建数据集 ArrayList<PieEntry> entries = new ArrayList<>(); entries.add(new PieEntry(40f, "Label 1")); entries.add(new PieEntry(30f, "Label 2")); entries.add(new PieEntry(20f, "Label 3")); entries.add(new PieEntry(10f, "Label 4")); PieDataSet dataSet = new PieDataSet(entries, "Pie Chart"); // 设置每个数据块的颜色 dataSet.setColors(ColorTemplate.COLORFUL_COLORS); PieData data = new PieData(dataSet); pieChart.setData(data); // 设置饼状图的样式和交互选项 pieChart.setDrawHoleEnabled(true); pieChart.setHoleColor(Color.WHITE); pieChart.setTransparentCircleColor(Color.WHITE); pieChart.setTransparentCircleAlpha(110); pieChart.setHoleRadius(58f); pieChart.setTransparentCircleRadius(61f); pieChart.setDrawCenterText(true); pieChart.setRotationEnabled(true); pieChart.setHighlightPerTapEnabled(true); pieChart.animateY(1400, Easing.EaseInOutQuad); // 更新视图 pieChart.invalidate(); ``` 这样就可以在Android应用中绘制一个简单的饼状图了。你可以根据需要调整样式和交互选项,以满足具体需求。更多关于MPAndroidChart的使用和自定义选项,请参考官方文档和示例代码。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值