Как получить цвет от кнопки, когда фон установлен как нарисованный - PullRequest
0 голосов
/ 31 августа 2018

у меня есть <Button/>

<Button
    android:id="@+id/btn"
    android:background="@drawable/btn_color"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Фон кнопки установлен как android:background="@drawable/btn_color", где btn_color равно

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:padding="10dp">
    <solid android:color="#FF0000"/>
    <corners android:radius="10dp"/>
</shape>

Мне нужно получить цвет #FF0000 кнопки в моем коде. Я попробовал

val drawable = btn.getBackground().mutate() as GradientDrawable

Как получить цвет из этого Drawable?

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Попробуйте:

val color = (btn.background as? ShapeDrawable)?.paint.color
0 голосов
/ 31 августа 2018

Почему бы не преобразовать Drawable в растровое изображение (ссылка: Как преобразовать Drawable в растровое изображение? ), а затем получить пиксель в его центре? Не может быть самым быстрым способом, но одним из наиболее совместимых (поскольку градиент, цвет или другой тип Drawable сведены в совместимое растровое изображение, и вам не нужно обрабатывать эти различия)

0 голосов
/ 31 августа 2018

Использование:

val color = (btn.background as? GradientDrawable)?.color?.defaultColor

EDIT

но getColor () доступно только для API 24 и выше . Вы должны проверить Build.VERSION.SDK_INT >= Build.VERSION_CODES.N:

val color = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    (btn.background as? GradientDrawable)?.color?.defaultColor
} else null
...