Может кто-нибудь объяснить мне, как или когда 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()
}