如何在Android中创建使用情况饼图?请提供实现帮助
Android实现带百分比标注的饼图方案
方案一:使用MPAndroidChart第三方库
这是Android开发中常用的图表库,可快速实现带百分比标注的饼图。
1. 添加依赖
在Module级别的build.gradle文件中添加依赖:
dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' }
2. 布局中添加PieChart
<com.github.mikephil.charting.charts.PieChart android:id="@+id/pieChart" android:layout_width="match_parent" android:layout_height="300dp"/>
3. 代码中配置数据与样式
PieChart pieChart = findViewById(R.id.pieChart); // 准备饼图数据 ArrayList<PieEntry> entries = new ArrayList<>(); entries.add(new PieEntry(30f, "类别A")); entries.add(new PieEntry(20f, "类别B")); entries.add(new PieEntry(50f, "类别C")); // 配置数据集 PieDataSet dataSet = new PieDataSet(entries, "数据占比"); // 设置各区块颜色 dataSet.setColors(Color.parseColor("#FF6B6B"), Color.parseColor("#4ECDC4"), Color.parseColor("#45B7D1")); // 开启数值显示并设置为百分比格式 dataSet.setDrawValues(true); dataSet.setValueFormatter(new PercentFormatter(pieChart)); dataSet.setValueTextSize(12f); dataSet.setValueTextColor(Color.WHITE); // 组装饼图数据 PieData pieData = new PieData(dataSet); pieChart.setData(pieData); // 调整样式 pieChart.getDescription().setEnabled(false); // 隐藏默认描述 pieChart.setDrawHoleEnabled(false); // 不绘制中心空心区域 pieChart.setRotationEnabled(false); // 禁止手动旋转 pieChart.invalidate(); // 刷新图表
方案二:自定义View实现
如果需要高度定制饼图样式,可通过自定义View实现:
1. 创建自定义PieChartView类
public class PieChartView extends View { private Paint mPaint; private List<Float> mDataList; private List<Integer> mColorList; private RectF mChartRect; private float mTotalValue; public PieChartView(Context context) { this(context, null); } public PieChartView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mChartRect = new RectF(); } // 设置饼图数据、颜色 public void setChartData(List<Float> dataList, List<Integer> colorList) { this.mDataList = dataList; this.mColorList = colorList; // 计算数据总和 mTotalValue = 0; for (float value : dataList) { mTotalValue += value; } invalidate(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (mDataList == null || mDataList.isEmpty()) return; int centerX = getWidth() / 2; int centerY = getHeight() / 2; int radius = Math.min(centerX, centerY) - 50; // 定义饼图绘制区域 mChartRect.set(centerX - radius, centerY - radius, centerX + radius, centerY + radius); float startAngle = 0f; for (int i = 0; i < mDataList.size(); i++) { float sweepAngle = (mDataList.get(i) / mTotalValue) * 360; // 绘制饼图区块 mPaint.setColor(mColorList.get(i)); canvas.drawArc(mChartRect, startAngle, sweepAngle, true, mPaint); // 绘制百分比文字 float textAngle = startAngle + sweepAngle / 2; float textX = centerX + (radius / 2) * (float) Math.cos(Math.toRadians(textAngle)); float textY = centerY + (radius / 2) * (float) Math.sin(Math.toRadians(textAngle)); mPaint.setColor(Color.WHITE); mPaint.setTextSize(16f); mPaint.setTextAlign(Paint.Align.CENTER); String percentText = String.format("%.1f%%", (mDataList.get(i)/mTotalValue)*100); canvas.drawText(percentText, textX, textY, mPaint); startAngle += sweepAngle; } } }
2. 布局中使用自定义View
<com.yourpackage.PieChartView android:id="@+id/customPieChart" android:layout_width="match_parent" android:layout_height="300dp"/>
3. 代码中设置数据
PieChartView customPieChart = findViewById(R.id.customPieChart); List<Float> data = Arrays.asList(30f, 20f, 50f); List<Integer> colors = Arrays.asList(Color.parseColor("#FF6B6B"), Color.parseColor("#4ECDC4"), Color.parseColor("#45B7D1")); customPieChart.setChartData(data, colors);
内容的提问来源于stack exchange,提问作者Krishna Pandey
相关产品推荐
相关产品推荐

