как удалить линии, если значение равно 0% в круговой диаграмме


Я работаю над круговой диаграммой, для этого я использую библиотеку MPAndroidChart, значения могут содержать 0% для любых данных или более одного, и я отображаю значения вне piechart, используя setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE). Я не хочу отображать значения 0% в круговой диаграмме, у меня есть решение для этого, чтобы использовать формат значения.

public class CustomPercentFormatter implements IValueFormatter {    

    private DecimalFormat mFormat;

    public CustomPercentFormatter() {
        mFormat = new DecimalFormat("###,###,##0.0");
    }

    public CustomPercentFormatter(DecimalFormat format) {
        this.mFormat = format;
    }

    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {

        if (value == 0.0f)
            return "";

        return mFormat.format(value) + " %";
    }
}

Но если я использую опцию lines, то линия отображается для 0% значений и перекрывается для нескольких 0% значений, поэтому кто-нибудь может помочь мне удалить опцию line для 0% ценности ?

изображение

2 3

2 ответа:

Если вы не хотите, чтобы эти линии были нарисованы, вы должны установить цвет этой линии в ColorTemplate.COLOR_NONE.

Мне не хватает вашего исходного кода, чтобы указать, что именно нужно делать, но на примере https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PieChartActivity.java#L199 Вы можете проверить, как это сделать.

Я изменил метод drawValues в PieChartRenderer класс.

Не отображать строку, если значение равно 0.

Просто поставьте одно условие:

if (entry.getValue() != 0.0) {
    if (dataSet.getValueLineColor() != ColorTemplate.COLOR_NONE) {
        c.drawLine(pt0x, pt0y, pt1x, pt1y, mValueLinePaint);
        c.drawLine(pt1x, pt1y, pt2x, pt2y, mValueLinePaint);
    }
}

Вместо следующего кода:

if (dataSet.getValueLineColor() != ColorTemplate.COLOR_NONE) {
    c.drawLine(pt0x, pt0y, pt1x, pt1y, mValueLinePaint);
    c.drawLine(pt1x, pt1y, pt2x, pt2y, mValueLinePaint);
}