【发布时间】:2012-03-23 03:44:38
【问题描述】:
我正在尝试为具有 10dp 填充和 10dp 圆角的 java 代码动态创建 CustomButton。我写了以下内容:
public class CustomButton extends Button {
private GradientDrawable gd;
private ShapeDrawable sd;
private LayerDrawable ld;
private StateListDrawable sld;
public CustomButton(Context context) {
super(context);
gd = new GradientDrawable(GradientDrawable.Orientation.TL_BR, new int[]{Color.parseColor("#39D100"), Color.parseColor("#369212")});
gd.setCornerRadius(10);
sd = new PaintDrawable();
sd.setPadding(10, 10, 10, 10);
ld = new LayerDrawable( new Drawable[]{sd, gd} );
sld = new StateListDrawable();
sld.addState(new int[]{0,1}, ld);
setBackgroundDrawable(sld);
}
}
如果我仅将 GradientDrawable 或仅将 ShapeDrawable 添加到 StateListDrawable 中,它可以正常工作,但如果我将两者都放入 LayerDrawable 中,则填充和角部分将具有黑色背景,并且不会像预期的那样透明。
截图:
【问题讨论】:
-
现在是 2020 年,这仍然是个问题
-
要修复它,您必须使用具有递增插图和 alpha 值的 RoundRectShape 绘制自己的渐变