From 767f47e99b60f4389518a516ea1cd51850f39201 Mon Sep 17 00:00:00 2001 From: Moritz Both Date: Tue, 7 Jun 2016 16:54:08 +0200 Subject: [PATCH 1/3] allow invalid Y values in LineChart (Float.NaN) resulting in interrupted line. --- .../hellocharts/renderer/LineChartRenderer.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/hellocharts-library/src/lecho/lib/hellocharts/renderer/LineChartRenderer.java b/hellocharts-library/src/lecho/lib/hellocharts/renderer/LineChartRenderer.java index b12e9609..07554485 100644 --- a/hellocharts-library/src/lecho/lib/hellocharts/renderer/LineChartRenderer.java +++ b/hellocharts-library/src/lecho/lib/hellocharts/renderer/LineChartRenderer.java @@ -215,15 +215,21 @@ private void drawPath(Canvas canvas, final Line line) { prepareLinePaint(line); int valueIndex = 0; + boolean invalidYValue = false; for (PointValue pointValue : line.getValues()) { final float rawX = computator.computeRawX(pointValue.getX()); final float rawY = computator.computeRawY(pointValue.getY()); - if (valueIndex == 0) { - path.moveTo(rawX, rawY); - } else { - path.lineTo(rawX, rawY); + if (Float.isNaN(rawY)) + invalidYValue = true; + else { + if (valueIndex == 0 || invalidYValue) { + path.moveTo(rawX, rawY); + } else { + path.lineTo(rawX, rawY); + } + invalidYValue = false; } ++valueIndex; From ede55de055c17f45f846c52fd781d787ee280e66 Mon Sep 17 00:00:00 2001 From: Moritz Both Date: Wed, 8 Jun 2016 10:03:55 +0200 Subject: [PATCH 2/3] setCubic(false) no longer resets square mode setSquare(false) no longer resets cubic mode --- hellocharts-library/src/lecho/lib/hellocharts/model/Line.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hellocharts-library/src/lecho/lib/hellocharts/model/Line.java b/hellocharts-library/src/lecho/lib/hellocharts/model/Line.java index b9e6ce0b..db00b497 100644 --- a/hellocharts-library/src/lecho/lib/hellocharts/model/Line.java +++ b/hellocharts-library/src/lecho/lib/hellocharts/model/Line.java @@ -225,7 +225,7 @@ public boolean isCubic() { public Line setCubic(boolean isCubic) { this.isCubic = isCubic; - if (isSquare) + if (isSquare && isCubic) setSquare(false); return this; } @@ -236,7 +236,7 @@ public boolean isSquare() { public Line setSquare(boolean isSquare) { this.isSquare = isSquare; - if (isCubic) + if (isCubic && isSquare) setCubic(false); return this; } From 0048aa39fac1b55ec9ca764f4447ee3d41228dfc Mon Sep 17 00:00:00 2001 From: Moritz Both Date: Wed, 8 Jun 2016 10:13:15 +0200 Subject: [PATCH 3/3] allow line interruptions (Float.NaN) for square lines, too. Note: For cubic lines this does not yet work. --- .../hellocharts/renderer/LineChartRenderer.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/hellocharts-library/src/lecho/lib/hellocharts/renderer/LineChartRenderer.java b/hellocharts-library/src/lecho/lib/hellocharts/renderer/LineChartRenderer.java index 07554485..221a9eca 100644 --- a/hellocharts-library/src/lecho/lib/hellocharts/renderer/LineChartRenderer.java +++ b/hellocharts-library/src/lecho/lib/hellocharts/renderer/LineChartRenderer.java @@ -249,17 +249,19 @@ private void drawSquarePath(Canvas canvas, final Line line) { prepareLinePaint(line); int valueIndex = 0; - float previousRawY = 0; + float previousRawY = Float.NaN; for (PointValue pointValue : line.getValues()) { final float rawX = computator.computeRawX(pointValue.getX()); final float rawY = computator.computeRawY(pointValue.getY()); - if (valueIndex == 0) { - path.moveTo(rawX, rawY); - } else { - path.lineTo(rawX, previousRawY); - path.lineTo(rawX, rawY); + if (! Float.isNaN(rawY)) { + if (Float.isNaN(previousRawY)) { + path.moveTo(rawX, rawY); + } else { + path.lineTo(rawX, previousRawY); + path.lineTo(rawX, rawY); + } } previousRawY = rawY;