Как использовать дни недели в качестве меток правой оси с помощью MPAndroidChart? - PullRequest
0 голосов
/ 29 апреля 2020

Когда я использую код ниже, только первое значение меняется на «Мо», но остальные значения одинаковы. Как я могу отредактировать мой код, чтобы он работал?

mChart.getAxisRight().setValueFormatter(new MyValueFormatter());
class MyValueFormatter : ValueFormatter() {
    private val days = arrayOf("Mo", "Tu", "Wed", "Th", "Fr", "Sa", "Su")

    override fun getAxisLabel(value: Float, axis: AxisBase?): String {
        return days.getOrNull(value.toInt()) ?: value.toString()
    }
}

Мой результат:

enter image description here

1 Ответ

2 голосов
/ 29 апреля 2020

Основная проблема здесь в том, что ваши значения не соответствуют индексам массива days. Первый совпадает с индексом 0, следовательно, он показывает, но другие значения 20, 40, 60 ... которые являются OutOfArrayIndexBounds. Таким образом, чтобы решить эту проблему, вы должны создать карту вместо массива. Здесь я решил вашу проблему:

    class MyValueFormatter : ValueFormatter() {
        private val days = mapOf(0.0f to "Mon", 20.0f to "Tu", 40.0f to "Wed", 60.0f to "Th", 80.0f to "Fr", 100.0f to "Sa", 120.0f to "Su")

        override fun getAxisLabel(value: Float, axis: AxisBase?): String {
            return if (days.containsKey(value)) days[value] else value.toString()
        }
    }
...