以编程方式设置按钮背景可绘制颜色

时间:2015-08-22 23:38:15

标签: android android-drawable porter-duff android-color

square_transparent.png

我预先创建了一个drawable,它是一个矩形形状,但是完全透明。现在我想将这个drawable分配给代码中的Button,同时还将此drawable的Color从透明设置为某些特定颜色,如Orange等。

我已尝试使用其他帖子设置相同内容,例如 -

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

但它不起作用。当活动呈现按钮时,它仍然是透明的。

在将drawable分配给按钮之前,我还尝试将mDrawable.setAlpha显式设置为255(完全不透明),但即使这样也不起作用。

如果有人以其他方式工作,请提出建议。

3 个答案:

答案 0 :(得分:0)

使用Mode.SRC代替Mode.SRC_IN

有关详细信息,请参阅PorterDuff modes

答案 1 :(得分:0)

最后,我使用两步解决方案得到了最终结果 -

  1. 我将drawable从透明的那个固定为纯白色而没有不透明度(看起来颜色过滤/着色,最适合白人)

  2. 我还使用下面的代码行来完成这个技巧 -

    $_ = '/ou/; stoutest; print
    

答案 2 :(得分:0)

使用两种方法您可以设置背景颜色和边框

此For For background color

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;

    }