Чтобы отобразить значения в формате даты / времени в xAxis в MpAndroidChart, выполните следующие действия:
Сначала возьмите строковый массив, названный «xValsDateLabel», как показано ниже:
val xValsDateLabel = ArrayList<String>()
Теперь Для примера у меня есть 5 значений, которые будут напечатаны на оси x в формате даты или времени, а затем сначала примите эти значения в миллисекундах в одном массиве, как показано ниже:
val xValsOriginalMillis = ArrayList<Long>()
xValsOriginalMillis.add(1554875423736L)
xValsOriginalMillis.add(1555275494836L)
xValsOriginalMillis.add(1585578525900L)
xValsOriginalMillis.add(1596679626245L)
xValsOriginalMillis.add(1609990727820L)
Теперь выполните цикл с «xValsOriginalMillis», а затем поместите значения как ЧЧ: мм в «Строка массива« xValsDateLabel », преобразовав миллисекунды в ЧЧ: мм, как показано ниже:
for (i in xValsOriginalMillis.indices) {
val mm = xValsOriginalMillis[i] / 60 % 60
val hh = xValsOriginalMillis[i] / (60 * 60) % 24
val mDateTime = "$hh:$mm"
xValsDateLabel.add(mDateTime)
}
Теперь отформатируйте значения xAxis, как показано ниже:
class MyValueFormatter(private val xValsDateLabel: ArrayList<String>) : ValueFormatter() {
override fun getFormattedValue(value: Float): String {
return value.toString()
}
override fun getAxisLabel(value: Float, axis: AxisBase): String {
if (value.toInt() >= 0 && value.toInt() <= xValsDateLabel.size - 1) {
return xValsDateLabel[value.toInt()]
} else {
return ("").toString()
}
}
}
И используйте это средство форматирования значения с нижней строкой:
xAxis.valueFormatter = (MyValueFormatter(xValsDateLabel))
Привет, я отредактировал свой ответ, как показано ниже: (Есть ошибка несоответствия типов, потому что вы добавляете значение с плавающей запятой в список массива "records")
Примечание: пожалуйста, попробуйте добавить такое же количество элементов списка массивов в
"xValsOriginalMillis", как в массиве "records", в противном случае он будет
выдает ArrayIndexOutOfBound Exception.
class MainLineActivity : AppCompatActivity() {
private lateinit var mLineChart: LineChart
private var entries = java.util.ArrayList<Entry>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_line)
mLineChart = findViewById(R.id.lineChart)
entries.add(Entry(0f, 5f))
entries.add(Entry(1f, 10f))
entries.add(Entry(2f, 15f))
entries.add(Entry(3f, 20f))
entries.add(Entry(4f, 5f))
entries.add(Entry(5f, 10f))
// Log.d("itoNa", "$entries")
val set1 = LineDataSet(entries, "Water")
set1.fillAlpha = 110
var dataSet = java.util.ArrayList<ILineDataSet>()
dataSet.add(set1)
val lineData = LineData(dataSet)
mLineChart.data = lineData
set1.color = Color.RED
set1.mode = LineDataSet.Mode.CUBIC_BEZIER
mLineChart.description.text = ""
mLineChart.legend.isEnabled = false
mLineChart.invalidate()
mLineChart.axisRight.isEnabled = false
mLineChart.axisLeft.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)
mLineChart.axisRight.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)
val xAxis = mLineChart.xAxis
xAxis.position = XAxis.XAxisPosition.BOTTOM
xAxis.setDrawGridLines(false)
xAxis.labelCount = 4
xAxis.granularity = 1f
xAxis.isGranularityEnabled = true
val xValsDateLabel = ArrayList<String>()
val xValsOriginalMillis = ArrayList<Long>()
xValsOriginalMillis.add(1554875423736L)
xValsOriginalMillis.add(1555275494836L)
xValsOriginalMillis.add(1585578525900L)
xValsOriginalMillis.add(1596679626245L)
xValsOriginalMillis.add(1609990727820L)
xValsOriginalMillis.add(1709990727820L)
for (i in xValsOriginalMillis) {
val mm = i / 60 % 60
val hh = i / (60 * 60) % 24
val mDateTime = "$hh:$mm"
xValsDateLabel.add(mDateTime)
}
xAxis.valueFormatter = (MyValueFormatter(xValsDateLabel))
}
class MyValueFormatter(private val xValsDateLabel: ArrayList<String>) : ValueFormatter() {
override fun getFormattedValue(value: Float): String {
return value.toString()
}
override fun getAxisLabel(value: Float, axis: AxisBase): String {
if (value.toInt() >= 0 && value.toInt() <= xValsDateLabel.size - 1) {
return xValsDateLabel[value.toInt()]
} else {
return ("").toString()
}
}
}
}
Вот скриншот, прикрепленный ниже того, чего я достиг с приведенным выше кодом: