我必须在应用中显示实时数据。我选择MPAndroidChart作为图表库。
但如果没有设置带条目的初始数据集或设置轴最小值和轴最大值(x轴),我的图表就不会显示(使用此设置我无法滚动图表)。我几乎已经复制了示例中的所有代码,但它仍然是不可见的(示例在没有x轴边界的情况下启动并且运行良好):
的示例所有内容都在viewpager中的片段内:
以下是初始折线图的代码:
line_chart.apply {
description.apply {
isEnabled = true
text = "Live chart"
}
setTouchEnabled(true)
isDragEnabled = true
setScaleEnabled(true)
setDrawGridBackground(false)
setPinchZoom(true)
data = LineData().apply {
setValueTextColor(Color.BLACK)
}
// THIS:
// data = LineData(dataset("Simple").apply {
// for (i in 1..10) {
// addEntry(Entry(i.toFloat(), i.toFloat()))
// }
// })
legend.apply {
form = LINE
textColor = Color.BLACK
}
xAxis.apply {
textColor = Color.BLACK
setDrawGridLines(false)
setAvoidFirstLastClipping(true)
isEnabled = true
granularity = 5f
axisMinimum = 0f
axisMaximum = 20f
setValueFormatter { value, _ -> Date(value.toLong()).simpleSecondsFormat() }
}
axisLeft.apply {
textColor = Color.BLACK
// OR THIS:
//axisMinimum = 0f
//axisMaximum = 12f
setDrawGridLines(true)
}
axisRight.isEnabled = false
setVisibleXRangeMaximum(100f)
}
创建数据集的代码:
fun dataset(label: String): LineDataSet = LineDataSet(null, label).apply {
axisDependency = LEFT
color = Color.BLACK
setCircleColor(Color.RED)
lineWidth = 2f
circleRadius = 4f
fillAlpha = 65
fillColor = Color.RED
highLightColor = Color.GREEN
valueTextColor = Color.RED
valueTextSize = 9f
setDrawValues(true)
}
数据来自商店,使用RxJava2:
.observeOn(AndroidSchedulers.mainThread())
.doOnNext { Timber.d("Entry: $it, timestamp: ${it.timestamp}") }
.doOnNext {
line_chart.data.apply {
val dataSet = getDataSetByLabel(it.macAddress, true) ?: dataset(
it.macAddress).also { addDataSet(it) }
addEntry(Entry(it.timestamp.toFloat(), it.energy),
getIndexOfDataSet(dataSet))
notifyDataChanged()
}
}
.doOnNext {
line_chart.apply {
notifyDataSetChanged()
setVisibleXRangeMaximum(120f)
invalidate()
}
}
谢谢!
答案 0 :(得分:0)
意外修复问题,请从第一个代码段中删除第setVisibleXRangeMaximum(100f)
行。