Android图表通过MPAndroidChart实现饼状图,详细解释
在接触第一个安卓项目的时候,需要使用到饼状图统计数据,我一共用了三种方式,个人觉得MPAndroidChart非常好用,在这里详细说一下
其他方式传送门
(1)AChartEngine:
(2)Canvas绘制:https://www.meiwen.com.cn/subject/hopnwxtx.html canvas基本操作:(3)MPAndroidChart使用: 这个地址详细介绍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类
在这里基本上每个配置我都写了注释,如果还有想了解其他属性的
可参考:
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,有兴趣且有余力的,可以去下载看看