diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/ColorUtils.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/ColorUtils.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/ColorUtils.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/ColorUtils.java index a0de07c5f1..ef404840e8 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/ColorUtils.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/ColorUtils.java @@ -3,6 +3,7 @@ package com.mapbox.mapboxsdk.utils; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; +import android.graphics.Color; import android.graphics.drawable.Drawable; import android.support.annotation.ColorInt; import android.support.annotation.NonNull; @@ -11,6 +12,10 @@ import android.util.TypedValue; import android.widget.ImageView; import com.mapbox.mapboxsdk.R; +import com.mapbox.mapboxsdk.exceptions.ConversionException; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class ColorUtils { @@ -87,4 +92,26 @@ public class ColorUtils { Drawable wrappedDrawable = DrawableCompat.wrap(originalDrawable); DrawableCompat.setTintList(wrappedDrawable, getSelector(tintColor)); } + + static int normalizeColorComponent(String value) { + return (int) (Float.parseFloat(value) * 255); + } + + /** + * Convert an rgba string to a Color int + * + * @throws ConversionException on illegal input + */ + @ColorInt + public static int rgbaToColor(String value) { + Pattern c = Pattern.compile("rgba?\\s*\\(\\s*(\\d+\\.?\\d*)\\s*,\\s*(\\d+\\.?\\d*)\\s*,\\s*(\\d+\\.?\\d*)\\s*,?\\s*(\\d+\\.?\\d*)?\\s*\\)"); + Matcher m = c.matcher(value); + if (m.matches() && m.groupCount() == 3) { + return Color.rgb(normalizeColorComponent(m.group(1)), normalizeColorComponent(m.group(2)), normalizeColorComponent(m.group(3))); + } else if (m.matches() && m.groupCount() == 4) { + return Color.argb(normalizeColorComponent(m.group(4)), normalizeColorComponent(m.group(1)), normalizeColorComponent(m.group(2)), normalizeColorComponent(m.group(3))); + } else { + throw new ConversionException("Not a valid rgb/rgba value"); + } + } }
\ No newline at end of file |