Жизненный цикл IAxisValueFormatter - PullRequest
0 голосов
/ 22 февраля 2019

Может кто-нибудь объяснить мне, как или когда IAxisValueFormatter используется в libA MPAndroidChart?

Я не понимаю, когда вызывается getFormattedValue, я получаю IndexOutOfBoundExceptions и не могу отследить, гдеЯ могу изменить свой код, чтобы решить эту проблему.

Вот код, специфичный для моей схемы настройки.Если кому-то понадобится больше кода о чем-то внешнем к диаграмме, я покажу это в ответе.


    private fun setupBarchart() {
        val xAxis = enovap_barchart.xAxis
        val entries: ArrayList<BarEntry> = ArrayList()
        val set: BarDataSet
        val data: BarData
        val formatter: IAxisValueFormatter = object : IAxisValueFormatter {
            override fun getFormattedValue(value: Float, axis: AxisBase?): String {
                val index = value.toInt()

                Log.v(TAG, "formatting value: $index")
                return chartData[index].label!!
            }
        }
        val xAxisRenderer = context?.let {
            EnovapXAxisRenderer(
                it,
                enovap_barchart.viewPortHandler,
                enovap_barchart.xAxis,
                enovap_barchart.getTransformer(YAxis.AxisDependency.RIGHT),
                dateType
            )
        }

        chartData.forEachIndexed { index, vape ->
            entries.add(BarEntry(index.toFloat(), vape.nbVapes?.toFloat()!!))
        }

        set = BarDataSet(entries, "BarDataSet")
        set.axisDependency = YAxis.AxisDependency.RIGHT
        set.color = ContextCompat.getColor(context!!, R.color.barchartNotSelected)
        set.highLightColor = ContextCompat.getColor(context!!, R.color.barchartSelected)
        set.setDrawValues(false)

        data = BarData(set)

        xAxis.position = XAxis.XAxisPosition.BOTTOM
        xAxis.setDrawGridLines(false)
        xAxis.labelCount = entries.size
        xAxis.valueFormatter = formatter
        enovap_barchart.setXAxisRenderer(xAxisRenderer)
        enovap_barchart.extraBottomOffset = 15f
        enovap_barchart.data = data
        enovap_barchart?.isDragYEnabled = false
        enovap_barchart.isVerticalScrollBarEnabled = false
        enovap_barchart.isDoubleTapToZoomEnabled = false
        enovap_barchart?.isScaleYEnabled = false
        enovap_barchart?.isScaleXEnabled = false
        enovap_barchart?.setPinchZoom(false)
        enovap_barchart.axisRight.isEnabled = true
        enovap_barchart.axisLeft.isEnabled = false
        enovap_barchart.axisRight.setDrawAxisLine(true)
        enovap_barchart.axisRight.setDrawGridLines(true)
        enovap_barchart.axisRight.axisMinimum = 0f
        enovap_barchart.axisRight.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART)
        enovap_barchart?.setDrawGridBackground(false)
        enovap_barchart.setFitBars(false) // make the x-axis fit exactly all bars
        enovap_barchart?.description?.isEnabled = false
        xAxis.granularity = 1f // minimum axis-step (interval) is 1
        enovap_barchart?.legend?.isEnabled = false
        enovap_barchart?.isDoubleTapToZoomEnabled = false
        enovap_barchart.setVisibleXRangeMaximum(9f)
        enovap_barchart.moveViewToX(chartData.lastIndex.toFloat())
        enovap_barchart.setMaxVisibleValueCount(9)
        enovap_barchart.invalidate()
    }

...