Android 如何在条形图顶部显示不同的值

Android 如何在条形图顶部显示不同的值,android,charts,bar-chart,mpandroidchart,Android,Charts,Bar Chart,Mpandroidchart,我正在研究图形,他们工作得很好。我正在使用MPChart库。它在每个条的顶部显示精确的计算值。在这里我们可以看到,显示在条顶部的值是精确的条限值 现在我有另一个要求,我必须在条的顶部显示另一个不同于其极限值的值 请让我知道我如何才能做到这一点 您可以使用一个。您只需编写一个实现此接口的类并重写该方法: String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHan

我正在研究图形,他们工作得很好。我正在使用MPChart库。它在每个条的顶部显示精确的计算值。在这里我们可以看到,显示在条顶部的值是精确的条限值

现在我有另一个要求,我必须在条的顶部显示另一个不同于其极限值的值

请让我知道我如何才能做到这一点

您可以使用一个。您只需编写一个实现此接口的类并重写该方法:

String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler)
在方法中放入将实际值转换为要显示的值所需的逻辑。例如,下面的
ValueFormatter
只是将实际图表值乘以10:

public class TenTimesValueFormatter implements ValueFormatter {
    @Override
    protected String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
        return Integer.toString(value * 10);
    }
}
您可以这样使用它:

barData.setValueFormatter(new TenTimesValueFormatter());
public class IndexValueFormatter implements IValueFormatter {

    private final String [] values;

    public IndexValueFormatter(String[] values) {
        this.values = values;
    }

    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
        int index = Math.round(value);

        if (index < 0 || index >= values.length || index != (int)value)
            return "";

        return values[index];
    }
}
您可能需要:

mChart.getXAxis().setGranularity(1);
mChart.getXAxis().setGranularityEnabled(true);
更新:如果您需要一个仅从支持数组中获取值的
ValueFormatter
,您可以执行以下操作:

barData.setValueFormatter(new TenTimesValueFormatter());
public class IndexValueFormatter implements IValueFormatter {

    private final String [] values;

    public IndexValueFormatter(String[] values) {
        this.values = values;
    }

    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
        int index = Math.round(value);

        if (index < 0 || index >= values.length || index != (int)value)
            return "";

        return values[index];
    }
}
公共类IndexValueFormatter实现了IValueFormatter{
私有最终字符串[]值;
公共索引ValueFormatter(字符串[]值){
这个值=值;
}
@凌驾
公共字符串getFormattedValue(浮点值、条目、int-dataSetIndex、ViewPortHandler和ViewPortHandler){
int index=数学四舍五入(值);
如果(索引<0 | |索引>=values.length | |索引!=(int)值)
返回“”;
返回值[索引];
}
}

感谢David花费宝贵的时间和精力,但问题仍然存在,因为此过程正在更改我不想更改的XAxis数据的底部。我想更改显示在每个条顶部的数据,而不是底部的值,或者可以说出我在每个条底部显示的观察名称。@Devraj请检查更新的答案。您只需在您的barData上设置ValueFormatter。非常感谢David,它现在正在工作。但是有一个查询,它在所有的条上只显示一个浮点值,我们可以在浮点值的位置设置arraylist,这样每个条都可以有一个不同的值。@Devraj这不是一个真正的“代码为我”服务,但我很乐意提供帮助。所以我用你想要的代码更新了答案。请接受答案(答案旁绿色勾选)