没有初始边界,MPAndroidChart实时数据不可见

时间:2017-08-14 10:29:11

标签: android kotlin mpandroidchart

我必须在应用中显示实时数据。我选择MPAndroidChart作为图表库。

但如果没有设置带条目的初始数据集或设置轴最小值和轴最大值(x轴),我的图表就不会显示(使用此设置我无法滚动图表)。我几乎已经复制了示例中的所有代码,但它仍然是不可见的(示例在没有x轴边界的情况下启动并且运行良好):

https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/RealtimeLineChartActivity.java

以下是固定最大/最小X Max min fixed chart

的示例

以下是错误示例,未显示任何数据:No data

所有内容都在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()
          }
        }

谢谢!

1 个答案:

答案 0 :(得分:0)

意外修复问题,请从第一个代码段中删除第setVisibleXRangeMaximum(100f)行。