Мне нужно нарисовать график, как изображение, которое я загрузил, я использую библиотеку диаграмм MP и разрабатываю график, но хочу настроить его в соответствии с моими требованиями, но не могу найти решение для моих требований, мое основное требование - ось x, которую я хочу показать пользовательские значения на оси, например 5-11 12-18, но я передаю значение оси x, как это
private ArrayList<String> setXAxisValues() {
ArrayList<String> xVals = new ArrayList<String>();
xVals.add("10");
xVals.add("20");
xVals.add("30");
xVals.add("30.5");
xVals.add("40");
return xVals;
}
Таким образом, он показывает значения x, подобные этому 10 20 30, поэтому я хочу, чтобы мой график был построен с использованием этого значения x, которое происходит прямо сейчас, но хочу показать настраиваемое значение внизу, например 5-11 и т.д., и это значение динамически приходит из ответа Api, поэтому, пожалуйста, помогите мне в этом, ожидая положительного и скорейшего ответа. Спасибо заранее.
Чтобы отформатировать значения оси x, вы должны использовать метод setValueFormatter
, который принимает интерфейс обратного вызова, если вы должны реализовать метод getFormattedValue
, который вызывается перед рисованием значения оси x.
xAxis.setValueFormatter((value, axis) -> {
String res = "";
try {
// get current position of x-axis
int currentPosition = (int) value;
// check if position between array bounds
if (currentPosition > -1 && currentPosition < maxSize) {
// get value from formatted values array
res = xVals.get(currentPosition);
}
} catch (Exception e) {
// handle exception
}
return res;
});
Поделитесь, пожалуйста, своей реализацией MyXAxisValueFormatter()
?
теперь он работает, я внес некоторые изменения, но получаю исключение arrayindexbound, если значения осей x и y изменены. Я делюсь ссылкой с полным кодом класса, пожалуйста, проверьте файл и скажите, в чем проблема. files.fm/u/6pdpvfh6#sign_up
Прежде чем принимать массив, проверьте сообщение: if (currentPosition > -1 && currentPosition < maxSize) { return months[(int) value]; }
, где максимальный размер - это размер массива.
ок, давай попробую, а как получить текущее положение? это позиция в массиве? и проверяли ли вы мой код по ссылке?
получить текущую позицию с помощью (int) value
и проверить ее перед доступом к массиву
Я использую средство форматирования значений, подобное этому String [] values = new String [] {"5-11", "12-18", "19-25", "26-02"}; xAxis.setValueFormatter (новый MyXAxisValueFormatter (значения)); но он все еще не работает