MPAndroidChart的使用:饼图
程序员文章站
2022-06-30 14:14:11
...
效果图如下:
本图使用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); 设置中间空洞的半径,这个值越大,中间空洞也就越大。