diff --git a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/scalebar/ScaleBarTest.java b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/scalebar/ScaleBarTest.java index 299594c2d..3f61a94f9 100644 --- a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/scalebar/ScaleBarTest.java +++ b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/scalebar/ScaleBarTest.java @@ -247,4 +247,25 @@ public void testMetrics() { assertFalse(scaleBarWidget.isMetricUnit()); }); } + + @Test + public void testRatio() { + validateTestSetup(); + setupScaleBar(); + assertEquals(0.5f,scaleBarWidget.getRatio(), 0f); + invoke(mapboxMap, (uiController, mapboxMap) -> { + ScaleBarOptions option = new ScaleBarOptions(activity); + option.setMaxWidthRatio(0.1f); + scaleBarWidget = scaleBarPlugin.create(option); + assertNotNull(scaleBarWidget); + assertEquals(0.1f, scaleBarWidget.getRatio(), 0f); + }); + invoke(mapboxMap, (uiController, mapboxMap) -> { + ScaleBarOptions option = new ScaleBarOptions(activity); + option.setMaxWidthRatio(1.0f); + scaleBarWidget = scaleBarPlugin.create(option); + assertNotNull(scaleBarWidget); + assertEquals(1.0f, scaleBarWidget.getRatio(), 0f); + }); + } } 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 ba52e0cab..d2b66dc4f 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 @@ -46,6 +46,7 @@ class ScalebarActivity : AppCompatActivity() { .setMarginTop(15f) .setMarginLeft(16f) .setTextBarMargin(15f) + .setMaxWidthRatio(0.5f) scaleBarPlugin.create(scaleBarOptions) fabScaleWidget.setOnClickListener { diff --git a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarOptions.java b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarOptions.java index 20bfab614..6ac8e373c 100644 --- a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarOptions.java +++ b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarOptions.java @@ -4,6 +4,7 @@ import androidx.annotation.ColorRes; import androidx.annotation.DimenRes; +import androidx.annotation.FloatRange; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.core.content.ContextCompat; @@ -28,6 +29,7 @@ public class ScaleBarOptions { private float borderWidth; private float textSize; private boolean isMetricUnit; + private float ratio; public ScaleBarOptions(@NonNull Context context) { this.context = context; @@ -42,6 +44,7 @@ public ScaleBarOptions(@NonNull Context context) { setTextColor(android.R.color.black); setPrimaryColor(android.R.color.black); setSecondaryColor(android.R.color.white); + setMaxWidthRatio(0.5f); } /** @@ -62,6 +65,7 @@ ScaleBarWidget build() { scaleBarWidget.setSecondaryColor(secondaryColor); scaleBarWidget.setTextColor(textColor); scaleBarWidget.setTextSize(textSize); + scaleBarWidget.setRatio(ratio); return scaleBarWidget; } @@ -256,6 +260,16 @@ public ScaleBarOptions setTextBarMargin(@DimenRes int textBarMargin) { return this; } + /** + * Set the ratio of scale bar max width compared with MapView width. + * + * @param ratio the ratio scale bar will use, must be in the range from 0.1f to 1.0f. + */ + public ScaleBarOptions setMaxWidthRatio(@FloatRange(from = 0.1f, to = 1.0f) float ratio) { + this.ratio = ratio; + return this; + } + /** * Helper class to determine the user measuring system. *
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 c63d616fb..f7fdeb3d6 100644
--- a/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java
+++ b/plugin-scalebar/src/main/java/com/mapbox/pluginscalebar/ScaleBarWidget.java
@@ -41,6 +41,7 @@ public class ScaleBarWidget extends View {
private float textSize;
private double distancePerPixel;
private boolean isMetricUnit;
+ private float ratio;
private ArrayList