Я создал класс CustomRadarDataSet, как показано ниже, чтобы добиться этого, но он просто не работает. getColor (index) всегда выполняет часть else. Не уверен, почему X-индекс не передается правильно в getColor (index). Я уверен, что у меня есть значения, которые меньше, чем maxVal. Тот же подход работает для BarDataSet и LineDataSet, но не для RadarDataSet.
public class CustomRadarDataSet extends RadarDataSet {
public CustomRadarDataSet(List<RadarEntry> yVals, String label) {
super(yVals, label);
}
private float maxVal = 50;
public float getMaxVal() {
return maxVal;
}
public void setMaxVal(float val) {
this.maxVal = val;
}
@Override
public int getColor(int index) {
if(getEntryForIndex(index).getY() < maxVal)
return mColors.get(0);
else
return mColors.get(2);
}
}
Вот как я использовал CustomRadarDataSet.
ArrayList<IRadarDataSet> dataSets = new ArrayList<IRadarDataSet>();
CustomRadarDataSet set = new CustomRadarDataSet(readings, "");
set.setColors(new int[]{
Color.rgb(250,55,0),
Color.rgb(0,0,255),
Color.rgb(0,0,0)
});
set.setMaxVal(maxReading); // get this value dynamically
set.setHighlightEnabled(true);
set.setDrawHighlightIndicators(true);
dataSets.add(set);
RadarData data = new RadarData(dataSets);
data.setValueTextSize(8f);
data.setDrawValues(false);
Редактировать
X-индекс верен, и getY () также возвращает ожидаемые показания, сравнение значения y и maxVal оценивается правильно, но каким-то образом соединительная кривая все-таки не подбирает нужный цвет. Похоже, что это ограничение только радиолокационной карты.