как удалить линии, если значение равно 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 ответа:
Если вы не хотите, чтобы эти линии были нарисованы, вы должны установить цвет этой линии в
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); }