Программная установка цвета фона кнопки Drawable Color

square_transparent.png

У меня есть рисунок, созданный заранее, который имеет форму прямоугольника, но полностью прозрачен. Теперь я хотел бы назначить этот рисунок кнопке в коде, но также установить цвет этого рисунка с прозрачного на какой-то определенный цвет, например оранжевый и т. д.

Я уже пытался установить то же самое, используя некоторые другие сообщения, такие как -

Drawable mDrawable = ContextCompat.getDrawable(this, R.drawable.square_transparent); 
    mDrawable.setColorFilter(
                    new PorterDuffColorFilter(
                            Color.Orange, Mode.SRC_IN)
                            );

но это не работает. Когда действие отображает кнопку, она по-прежнему прозрачна.

Я также пытался явно установить для mDrawable.setAlpha значение 255 (полностью непрозрачный), прежде чем назначать кнопку, но даже это не работает.

Пожалуйста, предложите, если у кого-то это работает каким-то другим способом.


person omkar.ghaisas    schedule 22.08.2015    source источник


Ответы (3)


Используйте Mode.SRC вместо Mode.SRC_IN.

Дополнительные сведения см. в разделе режимы PorterDuff.

person Gergely Kőrössy    schedule 22.08.2015
comment
Это не помогает никакому другому @Gergely. Это мой фактический код в приложении — Drawable mDrawable = ContextCompat.getDrawable(this, R.drawable.square_transparent); mDrawable.setColorFilter (новый PorterDuffColorFilter (commonFuncCall.MapDigitToRColor (digitInput), Mode.SRC)); shape.setBackground(mDrawable); - person omkar.ghaisas; 24.08.2015

Наконец, я получил конечные результаты, используя двухэтапное решение:

  1. Я исправил рисунок с прозрачного на чисто белый без непрозрачности (кажется, фильтрация / тонирование цвета лучше всего работает на белых)

  2. Я также использовал приведенные ниже строки кода, чтобы добиться цели:

        Drawable drawable = ResourcesCompat.getDrawable(context.getResources(), R.drawable.yourcustomshape, null);
    
        drawable = DrawableCompat.wrap(drawable);
    
        DrawableCompat.setTintList(drawable, ColorStateList.valueOf(Color.BLUE)); // Can be any color you need to color the shape
    
person omkar.ghaisas    schedule 29.08.2015

Используя два метода, вы можете установить цвет фона и границу

Это для Без цвета фона

public static GradientDrawable backgroundWithoutBorder(int color) {

        GradientDrawable gdDefault = new GradientDrawable();
        gdDefault.setColor(color);
        gdDefault.setCornerRadii(new float[] { radius, radius, 0, 0, 0, 0,
                radius, radius });
        return gdDefault;

    }

Это для с фоновым цветом

    public static GradientDrawable backgroundWithBorder(int bgcolor,
            int brdcolor) {

        GradientDrawable gdDefault = new GradientDrawable();
        gdDefault.setColor(bgcolor);
        gdDefault.setStroke(2, brdcolor);
        gdDefault.setCornerRadii(new float[] { radius, radius, 0, 0, 0, 0,
                radius, radius });

        return gdDefault;

    }
person Maulik Santoki    schedule 11.09.2015