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..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,9 +6,12 @@ class ScaleBarConstants { static double FEET_PER_METER = 3.2808; + static int KILOMETER = 1000; static int FEET_PER_MILE = 5280; static String METER_UNIT = " m"; static String FEET_UNIT = " ft"; + static String KILOMETER_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..a7d01fdf8 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.KILOMETER; +import static com.mapbox.pluginscalebar.ScaleBarConstants.KILOMETER_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 < 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; + } + } + /** * Handler class to limit the refresh frequent. */