在LineDataSet中为单独的值标签设置单独的文本颜色

时间:2015-11-10 15:34:27

标签: android mpandroidchart

我正在尝试为LineDataSet中的每个Value标签设置不同的颜色。在我的例子中,所呈现的许多值最终将为零。在这种情况下,我想隐藏标签,可能是通过将值的文本颜色设置为透明。

我知道可以通过LineDataSet.setValueTextColor()方法为所有标签设置一种颜色。但是,这仅为所有标签设置颜色,而不是单个标签。

在下面的屏幕截图中,您可以看到我当前的图表。我需要隐藏零值的标签。

我真的很感激任何提示!

Labels with a value of Zero are still show, but I'd like those hidden

2 个答案:

答案 0 :(得分:1)

为什么不使用ValueFormatter

expect(page).not_to have_selector("#sort-by")

用法:

public class GreaterThanZeroValueFormatter implements ValueFormatter {
    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
        if (value > 0) {
            return String.valueOf(value);
        } else {
            return "";
        }
    }
}

答案 1 :(得分:0)

好吧,虽然我很确定Cory的答案会更快更轻松,但我会发布我在这里为后人所做的事情。我使用MPAndroidChart附带的强大而方便的MarkerView来管理它。

首先,我调用了一个函数来突出显示值大于0的所有点。

private void highlightLinePoints(){
    List<Entry> entries = mLineChart.getData().getDataSetByIndex(0).getYVals();
    ArrayList<Highlight> indexes = new ArrayList<Highlight>();
    int i = 0;
    while (i<entries.size()){
        if (entries.get(i).getVal()>0 ){
            indexes.add(new Highlight(i,0));
        }
        i++;
    }
    Highlight[] highlights = new Highlight[indexes.size()];
    int e = 0;
    while(e<indexes.size()){
        highlights[e] = indexes.get(e);
        e++;
    }

    mLineChart.highlightValues(highlights);

}

After that, I subclassed MarkerView following this excellent guide

一旦我使用自定义MarkerView进行了xml布局设置和MarkerView子类化,就像将自定义MarkerView类分配给我的LineChart一样简单。

highlightLinePoints();

dataMarkerView dmv =  new dataMarkerView(getContext(), R.layout.data_marker_view);
mLineChart.setMarkerView(dmv);

我的子类与文档中提供的内容基本相同。

The fruits of my labor!