【问题标题】:LayerDrawable layers padding and rounded corner parts not transparentLayerDrawable 图层填充和圆角部分不透明
【发布时间】: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 绘制自己的渐变

标签: android android-layout


【解决方案1】:

要删除黑色背景,请使用

清除油漆颜色
sd.getPaint().setColor(0);

【讨论】:

    【解决方案2】:

    我认为这可以通过为您的按钮自定义选择器来实现,而不是编写整个类。 看看这个问题:Standard Android Button with a different color

    【讨论】:

    • 谢谢!这是我的第一个想法,但我不确定是否可以从 java 代码中更改渐变。
    • 当然可以:
    • 我的意思是动态没有 xml。我想创建许多具有相同其他参数的不同颜色的渐变按钮。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多