MPAndroidChart实时数据不可见,没有初始界限
我必须在应用程序中显示实时数据。 我选择MPAndroidChart作为图表的库。
但没有设置初始数据集的条目或设置轴最小值和轴最大值(x轴)我的图表不显示(与此设置,我不能滚动图表)。 我几乎已经从示例中复制了所有的代码,但它仍然是不可见的(例如开始没有x轴的边界,并且工作正常):
https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/RealtimeLineChartActivity.java
这里是固定的最大/最小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() } }
谢谢!
意外修复的问题,通过从第一个片段删除行setVisibleXRangeMaximum(100f)
。