From 35907f861109e449eb05c20a36f6798f3d238209 Mon Sep 17 00:00:00 2001 From: kevin Date: Thu, 11 Jul 2019 16:09:58 +0800 Subject: [PATCH 1/2] Change the unit of scalebar according distance --- .../activity/scalebar/ScalebarActivity.kt | 1 - .../pluginscalebar/ScaleBarConstants.java | 3 +++ .../mapbox/pluginscalebar/ScaleBarWidget.java | 26 +++++++++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/scalebar/ScalebarActivity.kt b/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/scalebar/ScalebarActivity.kt index abf08b374..ab5a67ff3 100644 --- a/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/scalebar/ScalebarActivity.kt +++ b/app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/scalebar/ScalebarActivity.kt @@ -32,7 +32,6 @@ class ScalebarActivity : AppCompatActivity() { .setTextSize(20f) .setBarHeight(15f) .setBorderWidth(5f) - .setMetricUnit(true) .setRefreshInterval(15) .setMarginTop(15f) .setMarginLeft(16f) diff --git a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarConstants.java b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarConstants.java index 8a170f4f1..5803339cc 100644 --- a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarConstants.java +++ b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarConstants.java @@ -6,9 +6,12 @@ class ScaleBarConstants { static double FEET_PER_METER = 3.2808; + static int KILO_METER = 1000; static int FEET_PER_MILE = 5280; static String METER_UNIT = " m"; static String FEET_UNIT = " ft"; + static String KILO_METER_UNIT = " km"; + static String MILE_UNIT = " mile"; static ArrayList> metricTable = new ArrayList>() { { add(new Pair<>(1, 2)); diff --git a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java index b882f306f..f0d1bb920 100644 --- a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java +++ b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java @@ -11,8 +11,14 @@ import android.view.View; import java.lang.ref.WeakReference; +import java.text.DecimalFormat; import java.util.ArrayList; +import static com.mapbox.pluginscalebar.ScaleBarConstants.FEET_PER_MILE; +import static com.mapbox.pluginscalebar.ScaleBarConstants.KILO_METER; +import static com.mapbox.pluginscalebar.ScaleBarConstants.KILO_METER_UNIT; +import static com.mapbox.pluginscalebar.ScaleBarConstants.MILE_UNIT; + /** * The scale widget is a visual representation of the scale bar plugin. */ @@ -37,6 +43,7 @@ public class ScaleBarWidget extends View { private ArrayList> scaleTable; private String unit; private final RefreshHandler refreshHandler; + private DecimalFormat decimalFormat = new DecimalFormat("0.0"); ScaleBarWidget(@NonNull Context context) { super(context); @@ -90,7 +97,7 @@ protected void onDraw(Canvas canvas) { int i = 0; for (; i < pair.second; i++) { barPaint.setColor(i % 2 == 0 ? primaryColor : secondaryColor); - String text = i == 0 ? String.valueOf(unitDistance * i) : unitDistance * i + unit; + String text = i == 0 ? String.valueOf(unitDistance * i) : getDistanceText(unitDistance * i); canvas.drawText(text, marginLeft + unitBarWidth * i, textSize + marginTop, @@ -101,7 +108,7 @@ protected void onDraw(Canvas canvas) { textBarMargin + textSize + marginTop + barHeight, barPaint); } - canvas.drawText(unitDistance * i + unit, + canvas.drawText(getDistanceText(unitDistance * i), marginLeft + unitBarWidth * i, textSize + marginTop, textPaint); @@ -341,6 +348,21 @@ void setMapViewWidth(int mapViewWidth) { maxBarWidth = mapViewWidth / 2f - marginLeft; } + /** + * Get the formatted distance text according unit and distance + * @param distance original distance + * @return Formatted distance text + */ + private String getDistanceText(int distance) { + if (ScaleBarConstants.METER_UNIT.equals(unit)) { + return distance < KILO_METER ? distance + unit + : decimalFormat.format(distance * 1.0 / KILO_METER) + KILO_METER_UNIT; + } else { + return distance < FEET_PER_MILE ? distance + unit + : decimalFormat.format(distance * 1.0 / FEET_PER_MILE) + MILE_UNIT; + } + } + /** * Handler class to limit the refresh frequent. */ From bd6d1129e4dc71578a1315ee0227c393a820e999 Mon Sep 17 00:00:00 2001 From: kevin Date: Thu, 11 Jul 2019 18:20:57 +0800 Subject: [PATCH 2/2] Fix review comment --- .../java/com/mapbox/pluginscalebar/ScaleBarConstants.java | 4 ++-- .../java/com/mapbox/pluginscalebar/ScaleBarWidget.java | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarConstants.java b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarConstants.java index 5803339cc..80f47a6df 100644 --- a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarConstants.java +++ b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarConstants.java @@ -6,11 +6,11 @@ class ScaleBarConstants { static double FEET_PER_METER = 3.2808; - static int KILO_METER = 1000; + static int KILOMETER = 1000; static int FEET_PER_MILE = 5280; static String METER_UNIT = " m"; static String FEET_UNIT = " ft"; - static String KILO_METER_UNIT = " km"; + static String KILOMETER_UNIT = " km"; static String MILE_UNIT = " mile"; static ArrayList> metricTable = new ArrayList>() { { diff --git a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java index f0d1bb920..a7d01fdf8 100644 --- a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java +++ b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java @@ -15,8 +15,8 @@ import java.util.ArrayList; import static com.mapbox.pluginscalebar.ScaleBarConstants.FEET_PER_MILE; -import static com.mapbox.pluginscalebar.ScaleBarConstants.KILO_METER; -import static com.mapbox.pluginscalebar.ScaleBarConstants.KILO_METER_UNIT; +import static com.mapbox.pluginscalebar.ScaleBarConstants.KILOMETER; +import static com.mapbox.pluginscalebar.ScaleBarConstants.KILOMETER_UNIT; import static com.mapbox.pluginscalebar.ScaleBarConstants.MILE_UNIT; /** @@ -355,8 +355,8 @@ void setMapViewWidth(int mapViewWidth) { */ private String getDistanceText(int distance) { if (ScaleBarConstants.METER_UNIT.equals(unit)) { - return distance < KILO_METER ? distance + unit - : decimalFormat.format(distance * 1.0 / KILO_METER) + KILO_METER_UNIT; + return distance < KILOMETER ? distance + unit + : decimalFormat.format(distance * 1.0 / KILOMETER) + KILOMETER_UNIT; } else { return distance < FEET_PER_MILE ? distance + unit : decimalFormat.format(distance * 1.0 / FEET_PER_MILE) + MILE_UNIT;