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具体实现
- 初始化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);//是否显示(不显示的话,图例可以自己自定义控件)
}
- 自定义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
网友评论