Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 图层可绘制图层填充和圆角部分不透明_Android_Android Layout - Fatal编程技术网

Android 图层可绘制图层填充和圆角部分不透明

Android 图层可绘制图层填充和圆角部分不透明,android,android-layout,Android,Android Layout,我正在尝试为java代码动态创建一个CustomButton,使用10dp填充和10dp圆角。我写了以下内容: public class CustomButton extends Button { private GradientDrawable gd; private ShapeDrawable sd; private LayerDrawable ld; private StateListDrawable sld; public CustomButt

我正在尝试为java代码动态创建一个CustomButton,使用10dp填充和10dp圆角。我写了以下内容:

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中,则填充和拐角部分将具有黑色背景,并且不像预期的那样透明

截图:

我认为这可以通过自定义按钮选择器来实现,而不是编写整个类。
看看这个问题:

要去除黑色背景,请用

sd.getPaint().setColor(0);

谢谢这是我的第一个想法,但我不确定我是否可以改变java代码的梯度。我想用相同的其他参数创建许多不同颜色的渐变按钮。现在是2020年,这仍然是一个问题。要解决这个问题,你必须使用带有递增插入和alpha值的RoundRectShape绘制自己的渐变