diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets')
2 files changed, 32 insertions, 9 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java index 8b6b93e03a..24da59bb7e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java @@ -51,6 +51,7 @@ import timber.log.Timber; */ public class MyLocationView extends View { + private static final int UNDEFINED_TINT_COLOR = -1; private MyLocationBehavior myLocationBehavior; private MapboxMap mapboxMap; @@ -198,12 +199,8 @@ public class MyLocationView extends View { * @param color The color to tint the drawable with */ public final void setForegroundDrawableTint(@ColorInt int color) { - if (foregroundDrawable != null) { - foregroundDrawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); - } - if (foregroundBearingDrawable != null) { - foregroundBearingDrawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); - } + applyDrawableTint(foregroundDrawable, color); + applyDrawableTint(foregroundBearingDrawable, color); invalidate(); } @@ -247,7 +244,7 @@ public class MyLocationView extends View { if (backgroundDrawable == null) { return; } - backgroundDrawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); + applyDrawableTint(backgroundDrawable, color); invalidate(); } @@ -737,6 +734,26 @@ public class MyLocationView extends View { setEnabled(isEnabled(), locationSource != null); } + private void applyDrawableTint(Drawable drawable, @ColorInt int color) { + if (color == UNDEFINED_TINT_COLOR) { + removeTintColorFilter(drawable); + } else { + applyTintColorFilter(drawable, color); + } + } + + private void removeTintColorFilter(Drawable drawable) { + if (drawable != null) { + drawable.mutate().setColorFilter(null); + } + } + + private void applyTintColorFilter(Drawable drawable, @ColorInt int color) { + if (drawable != null) { + drawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); + } + } + private static class GpsLocationListener implements LocationEngineListener { private WeakReference<MyLocationView> userLocationView; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java index 2ad1bf7ebc..fe2f18e4dd 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java @@ -119,6 +119,7 @@ public class MyLocationViewSettings { * <p> * The foreground drawable is the image visible on screen * </p> + * It's linked with the foreground tint color * * @param foregroundDrawable the drawable to show as foreground without bearing * @param foregroundBearingDrawable the drawable to show as foreground when bearing is enabled @@ -127,6 +128,7 @@ public class MyLocationViewSettings { this.foregroundDrawable = foregroundDrawable; this.foregroundBearingDrawable = foregroundBearingDrawable; myLocationView.setForegroundDrawables(foregroundDrawable, foregroundBearingDrawable); + myLocationView.setForegroundDrawableTint(foregroundTintColor); } /** @@ -153,7 +155,8 @@ public class MyLocationViewSettings { * The color will tint both the foreground and the bearing foreground drawable. * </p> * - * @param foregroundTintColor the color to tint the foreground drawable + * @param foregroundTintColor the color to tint the foreground drawable or -1 (undefined color) to remove the + * existing foreground tint color */ public void setForegroundTintColor(@ColorInt int foregroundTintColor) { this.foregroundTintColor = foregroundTintColor; @@ -174,6 +177,7 @@ public class MyLocationViewSettings { * <p> * Padding can be added to provide an offset to the background * </p> + * It's linked with the background tint color * * @param backgroundDrawable the drawable to show as background * @param padding the padding added to the background @@ -186,6 +190,7 @@ public class MyLocationViewSettings { } else { myLocationView.setShadowDrawable(backgroundDrawable); } + myLocationView.setShadowDrawableTint(backgroundTintColor); } /** @@ -200,7 +205,8 @@ public class MyLocationViewSettings { /** * Set the background tint color. * - * @param backgroundTintColor the color to tint the background + * @param backgroundTintColor the color to tint the background drawable or -1 (undefined color) to remove the + * existing background tint color */ public void setBackgroundTintColor(@ColorInt int backgroundTintColor) { this.backgroundTintColor = backgroundTintColor; |