在我的应用程序中使用饼图。使用以下库
api 'com.github.PhilJay:MPAndroidChart:v3.0.3'
。
但面对问题的对齐问题。附上截图,请看一下:
代码:
public static void chartDetails(PieChart mChart, Typeface tf) {
mChart.animateXY(1400, 1400);
mChart.getDescription().setEnabled(false);
mChart.setCenterTextTypeface(tf);
mChart.setCenterText("");
mChart.setCenterTextSize(10f);
mChart.setCenterTextTypeface(tf);
// radius of the center hole in percent of maximum radius
mChart.setHoleRadius(45f);
mChart.setTransparentCircleRadius(50f);
Legend l = mChart.getLegend();
l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
l.setOrientation(Legend.LegendOrientation.VERTICAL);
l.setDrawInside(false);
mChart.setTouchEnabled(true);
}
答案 0 :(得分:5)
最后我得到了解决方案,感谢@Marc Estrada的回答。但是我做了一些更改。
我使用的以下代码,
public static void chartDetails1(PieChart mChart, Typeface tf) {
mChart.animateXY(1400, 1400);
mChart.getDescription().setEnabled(false);
mChart.setCenterTextTypeface(tf);
mChart.setCenterText("");
mChart.setCenterTextSize(10f);
mChart.setCenterTextTypeface(tf);
// radius of the center hole in percent of maximum radius
mChart.setHoleRadius(45f);
mChart.setTransparentCircleRadius(50f);
Legend l = mChart.getLegend();
l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setWordWrapEnabled(true);
l.setDrawInside(false);
mChart.setTouchEnabled(true);
mChart.setDrawEntryLabels(false);
mChart.setExtraOffsets(25.f, 0.f, 25.f, 0.f);
mChart.setUsePercentValues(true);
mChart.setDragDecelerationFrictionCoef(0.95f);
mChart.setDrawHoleEnabled(true);
mChart.setHoleColor(Color.WHITE);
mChart.setTransparentCircleColor(Color.WHITE);
mChart.setTransparentCircleAlpha(110);
mChart.setTransparentCircleRadius(61f);
mChart.setRotationAngle(0);
// enable rotation of the chart by touch
mChart.setHighlightPerTapEnabled(true);
// mChart.setUnit(" €");
// mChart.setDrawUnitsInChart(true);
l.setEnabled(true);
mChart.highlightValues(null);
mChart.setUsePercentValues(true);
/*new*/
mChart.setHoleRadius(30f);
mChart.setDrawCenterText(false);
mChart.setTransparentCircleRadius(35f);
mChart.getDescription().setEnabled(false);
mChart.setRotationEnabled(false);
mChart.setEntryLabelColor(Color.WHITE);
mChart.setEntryLabelTextSize(9f);
}
public static ArrayList<Integer> colorsList() {
ArrayList<Integer> colors = new ArrayList<Integer>();
for (int c : ColorTemplate.MATERIAL_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());
return colors;
}
public static PieData pieDatasetSlice(PieDataSet dataSet){
dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
dataSet.setValueLinePart1OffsetPercentage(100f); /** When valuePosition is OutsideSlice, indicates offset as percentage out of the slice size */
dataSet.setValueLinePart1Length(0.6f); /** When valuePosition is OutsideSlice, indicates length of first half of the line */
dataSet.setValueLinePart2Length(0.6f); /** When valuePosition is OutsideSlice, indicates length of second half of the line */
dataSet.setSliceSpace(0f);
PieData data = new PieData(dataSet);
data.setValueTextSize(5f);
data.setValueTextColor(Color.BLACK);
data.setValueFormatter(new PercentFormatter());
return data;
}
添加条目后,添加以下行
PieDataSet dataSet = new PieDataSet(entries1, null);
ArrayList<Integer> colors = Constants.colorsList();
dataSet.setColors(colors);
PieData data = Constants.pieDatasetSlice(dataSet);
如果要查看每个切片的更多详细信息,请执行以下操作,
答案 1 :(得分:4)
您可以使用外部值来清除小数据的数据集名称。
例如,您可以实现类似的目标:
这是代码。在覆盖PieChart
时应该使用此代码。如果您没有覆盖它,则应调整此代码以直接使用PieChart
,例如mChart.setData();
而不是setData();
。
PieDataSet dataSet = new PieDataSet(entries, null);
dataSet.setSliceSpace(3f);
dataSet.setIconsOffset(new MPPointF(0, 40));
dataSet.setSelectionShift(5f);
// Outside values
dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
dataSet.setValueLinePart1OffsetPercentage(100f); /** When valuePosition is OutsideSlice, indicates offset as percentage out of the slice size */
dataSet.setValueLinePart1Length(0.6f); /** When valuePosition is OutsideSlice, indicates length of first half of the line */
dataSet.setValueLinePart2Length(0.6f); /** When valuePosition is OutsideSlice, indicates length of second half of the line */
setExtraOffsets(0.f, 5.f, 0.f, 5.f); // Ofsets of the view chart to prevent outside values being cropped /** Sets extra offsets (around the chart view) to be appended to the auto-calculated offsets.*/
PieData data = new PieData(dataSet);
data.setValueTextSize(10f);
data.setValueTextColor(Color.BLACK);
setData(data);