Kotlin: установка пользовательских меток на оси x в линейном графике Mpandroidchart - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть массив списков строк со множеством дат (приложение 4500), мне нужно поместить все эти даты в xAxis моего графика, создать с помощью MPAndroidChart, как это можно сделать, я, Котлин?

Вот мойкод:

 val chart= ChartUtils()
    val mChart:LineChart = root.findViewById(R.id.lineChartEvolCuota) as LineChart

    mChart.isDragEnabled = true
    mChart.setScaleEnabled(false)
    mChart.axisRight.isEnabled=false
    val test : MutableList<object> = db.Object()
    val yArray= ArrayList<Entry>()
    val xLabel  = ArrayList<String>()

    var c = 0f
    for (i in test){
        yArray.add(Entry(c, i.value!!.toFloat()))
        xLabel.add(i.date.toString())
        c+=1f
    }

    val xaxis:XAxis = mChart.xAxis
    xaxis.granularity=1f

    val set1 = LineDataSet(yFondoA, "TEST")
    set1 .color = Color.parseColor(color)
    set1 .setDrawCircles(false)
    set1 .setDrawValues(false)
    val data = LineData(set1)
    mChart.data = data
    mChart.setVisibleXRangeMaximum(365f)
    mChart.moveViewToX(c)

enter image description here

РЕШЕНИЕ

 val xaxis:XAxis = mChart.xAxis
    xaxis.granularity=1f
    xaxis.setValueFormatter(object : ValueFormatter() {
        val pattern = "dd MMM yy"
        private val mFormat = SimpleDateFormat(pattern)
        private val inputFormat = SimpleDateFormat("yyyy-MM-dd")
        override fun getFormattedValue(value: Float): String {
            val millis = TimeUnit.HOURS.toMillis(value.toLong())
            return mFormat.format(inputFormat.parse(xLabel[value.toInt()]))
        }
    })

1 Ответ

0 голосов
/ 11 ноября 2019

Я нашел хороший пример java здесь , который, я думаю, поможет вам:

xAxis.setValueFormatter(new ValueFormatter() {

            private final SimpleDateFormat mFormat = new SimpleDateFormat("dd MMM HH:mm", Locale.ENGLISH);

            @Override
            public String getFormattedValue(float value) {

                long millis = TimeUnit.HOURS.toMillis((long) value);
                return mFormat.format(new Date(millis));
            }
        });

При копировании сегмента java в ваш код, IDE Jetbrains попросит вас автоматически преобразоватьto kotlin.

Использование настраиваемого форматера удобнее, чем установка меток вручную. В зависимости от того, как ваши даты извлекаются из данных, вам, возможно, потребуется скорректировать следующую строку из примера:

long millis = TimeUnit.HOURS.toMillis((long) value);

Также обратите внимание, что вы добавили свои метки в список, но никогда не используете их впоследствии, чтопочему ты их не видишь.

...