我预先创建了一个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(完全不透明),但即使这样也不起作用。
如果有人以其他方式工作,请提出建议。
答案 0 :(得分:0)
使用Mode.SRC
代替Mode.SRC_IN
。
有关详细信息,请参阅PorterDuff modes。
答案 1 :(得分:0)
最后,我使用两步解决方案得到了最终结果 -
我将drawable从透明的那个固定为纯白色而没有不透明度(看起来颜色过滤/着色,最适合白人)
我还使用下面的代码行来完成这个技巧 -
$_ = '/ou/; stoutest; print
答案 2 :(得分:0)
使用两种方法您可以设置背景颜色和边框
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;
}