From 5e3368d6c4ec31e05ceaaaead14a3cd570779130 Mon Sep 17 00:00:00 2001 From: Bruno Blazinc Date: Wed, 18 May 2022 08:56:24 +0200 Subject: [PATCH] Bug 46:Fix issue with chart line if all y values are the same --- .../com/yabu/livechartdemoapp/MainActivity.kt | 2 +- .../java/com/yabu/livechart/model/Dataset.kt | 31 ++++++++++++++++--- .../com/yabu/livechart/view/LiveChartView.kt | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/yabu/livechartdemoapp/MainActivity.kt b/app/src/main/java/com/yabu/livechartdemoapp/MainActivity.kt index ec7f6c8..6e26b62 100644 --- a/app/src/main/java/com/yabu/livechartdemoapp/MainActivity.kt +++ b/app/src/main/java/com/yabu/livechartdemoapp/MainActivity.kt @@ -43,7 +43,7 @@ class MainActivity : AppCompatActivity() { .setLiveChartStyle(chartStyle) .drawTouchOverlayAlways() .drawSmoothPath() - .setInitialTouchOverlayPosition(dataset.points[3].x) + .setInitialTouchOverlayPosition(dataset.points[3]) .setOnTouchCallbackListener(object : LiveChart.OnTouchCallback { @SuppressLint("SetTextI18n") override fun onTouchCallback(point: DataPoint) { diff --git a/livechart/src/main/java/com/yabu/livechart/model/Dataset.kt b/livechart/src/main/java/com/yabu/livechart/model/Dataset.kt index 8123a73..c001683 100644 --- a/livechart/src/main/java/com/yabu/livechart/model/Dataset.kt +++ b/livechart/src/main/java/com/yabu/livechart/model/Dataset.kt @@ -2,6 +2,20 @@ package com.yabu.livechart.model data class Dataset(val points: MutableList) { + private var upperBound= 0.0f + private var lowerBound= 0.0f + + init { + val sortedPoint = points.sortedBy { point -> point.y } + upperBound = sortedPoint.lastOrNull()?.y ?: 0f + lowerBound = sortedPoint.firstOrNull { point -> point.x >= 0 }?.y ?: 0f + // If the upper and lower bound are the same the chart won't draw anything because + // `upperBound` and `lowerBound` are used or division and that can cause problems + if(hasData() && lowerBound==upperBound){ + upperBound = increaseBound(upperBound) + } + } + fun hasData(): Boolean { val sortedPoint = points.filter { point -> point.x > 0 } return sortedPoint.firstOrNull() != null @@ -9,14 +23,21 @@ data class Dataset(val points: MutableList) { } fun upperBound(): Float { - val sortedPoint = points.sortedBy { point -> point.y } - return sortedPoint.lastOrNull()?.y ?: 0f + return upperBound } fun lowerBound(): Float { - val sortedPoint = points.sortedBy { point -> point.y } - .filter { point -> point.x >= 0 } - return sortedPoint.firstOrNull()?.y ?: 0f + return lowerBound + } + + private fun increaseBound(bound:Float): Float{ + var step = bound + var increase = 0.1f + while (step < 1.0f) { + step *= 10.0f + increase *= 0.1f + } + return bound + increase } companion object { diff --git a/livechart/src/main/java/com/yabu/livechart/view/LiveChartView.kt b/livechart/src/main/java/com/yabu/livechart/view/LiveChartView.kt index d1bb8b9..3a6188f 100644 --- a/livechart/src/main/java/com/yabu/livechart/view/LiveChartView.kt +++ b/livechart/src/main/java/com/yabu/livechart/view/LiveChartView.kt @@ -542,7 +542,7 @@ open class LiveChartView(context: Context, attrs: AttributeSet?) : View(context, // Assign the lower bound of this chart, lowerBound = if (secondDataset.hasData()) { - min(dataset.lowerBound(), secondDataset.lowerBound()) + min(dataset.lowerBound(), secondDataset.lowerBound()) } else { dataset.lowerBound() }