diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/ChartMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/ChartMeasurementView.java index 65e35325..360484a1 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/ChartMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/ChartMeasurementView.java @@ -139,6 +139,7 @@ public class ChartMeasurementView extends LineChart { isAnimationOn = true; isInGraphKey = true; + setHardwareAccelerationEnabled(true); setMarker(new ChartMarkerView(getContext(), R.layout.chart_markerview)); setDoubleTapToZoomEnabled(false); setHighlightPerTapEnabled(true); @@ -512,10 +513,6 @@ public class ChartMeasurementView extends LineChart { entry.setData(extraData); lineEntries.add(entry); - - /*if (prefs.getBoolean("regressionLine", false) && measurementView instanceof WeightMeasurementView) { - polyFitter.addPoint((double)entry.getX(), (double)entry.getY()); - }*/ } addMeasurementLine(lineDataSets, lineEntries, measurementView); @@ -523,7 +520,10 @@ public class ChartMeasurementView extends LineChart { } addGoalLine(lineDataSets); - // addRegressionLine(lineDataSets); TODO replaced it with an sliding average + + if (isInGraphKey) { + addRegressionLine(lineDataSets); + } LineData data = new LineData(lineDataSets); setData(data); @@ -607,7 +607,6 @@ public class ChartMeasurementView extends LineChart { } } - // TODO replace with sliding average private void addRegressionLine(List lineDataSets) { if (prefs.getBoolean("regressionLine", false)) { int regressLineOrder = 1; @@ -619,27 +618,40 @@ public class ChartMeasurementView extends LineChart { prefs.edit().putString("regressionLineOrder", "1").apply(); } - PolynomialFitter polyFitter = new PolynomialFitter(Math.min(regressLineOrder, 100)); + List regressionLineDataSets = new ArrayList<>(); - PolynomialFitter.Polynomial polynomial = polyFitter.getBestFit(); + for (ILineDataSet dataSet : lineDataSets) { + PolynomialFitter polyFitter = new PolynomialFitter(Math.min(regressLineOrder, 100)); - List valuesLinearRegression = new Stack<>(); + for (int i=0; i valuesLinearRegression = new Stack<>(); + + for (int i = minXValue; i < maxXValue; i++) { + double y_value = polynomial.getY(i); + valuesLinearRegression.add(new Entry((float) i, (float) y_value)); + } + + LineDataSet linearRegressionLine = new LineDataSet(valuesLinearRegression, dataSet.getLabel() + "-" + getContext().getString(R.string.label_regression_line)); + linearRegressionLine.setLineWidth(1.5f); + linearRegressionLine.setColor(dataSet.getColor()); + linearRegressionLine.setAxisDependency(dataSet.getAxisDependency()); + linearRegressionLine.setDrawValues(false); + linearRegressionLine.setDrawCircles(false); + linearRegressionLine.setHighlightEnabled(false); + linearRegressionLine.enableDashedLine(10, 30, 0); + + regressionLineDataSets.add(linearRegressionLine); } - LineDataSet linearRegressionLine = new LineDataSet(valuesLinearRegression, getContext().getString(R.string.label_regression_line)); - linearRegressionLine.setLineWidth(1.5f); - linearRegressionLine.setColor(ColorUtil.COLOR_VIOLET); - linearRegressionLine.setAxisDependency(prefs.getBoolean("weightOnRightAxis", true) ? YAxis.AxisDependency.RIGHT : YAxis.AxisDependency.LEFT); - linearRegressionLine.setDrawValues(false); - linearRegressionLine.setDrawCircles(false); - linearRegressionLine.setHighlightEnabled(false); - linearRegressionLine.enableDashedLine(10, 30, 0); - - lineDataSets.add(linearRegressionLine); + for (ILineDataSet dataSet : regressionLineDataSets) { + lineDataSets.add(dataSet); + } } } } diff --git a/android_app/app/src/main/res/values-de/strings.xml b/android_app/app/src/main/res/values-de/strings.xml index 8c71bc26..c05b940e 100644 --- a/android_app/app/src/main/res/values-de/strings.xml +++ b/android_app/app/src/main/res/values-de/strings.xml @@ -110,7 +110,7 @@ Fehler: Anfangsgewicht ist erforderlich Gerät wird nicht unterstützt Ziellinie - Gewichtsregressionsgerade + Regressionsgerade Polynomischer Regressions-Grad Suche nach Ihrer Bluetooth Waagen Knochenmasse diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index bd62436e..51263715 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -136,7 +136,7 @@ not found Ignore out of range data Initial weight - Regression weight line + Regression line Regression polynomial degree Goal line Help diff --git a/android_app/app/src/main/res/xml/graph_preferences.xml b/android_app/app/src/main/res/xml/graph_preferences.xml index 2514c01b..5f2b98c1 100644 --- a/android_app/app/src/main/res/xml/graph_preferences.xml +++ b/android_app/app/src/main/res/xml/graph_preferences.xml @@ -24,7 +24,6 @@ android:summaryOff="@string/info_is_not_visible" android:summaryOn="@string/info_is_visible" android:title="@string/label_goal_line" /> -