繁体   English   中英

如何以编程方式在具有透明背景颜色的按钮上设置不透明度

[英]how to set opacity on a button with a transparent background color programmatically

我正在开发一个组件库,目前正在开发按钮组件,但是当涉及到具有透明背景颜色的禁用按钮时,我遇到了问题,android 只是将灰色设置为按钮的背景颜色。

在这里我设置颜色

typeStyles.put("defaultBackgroundColor", context.getResources().getColor(R.color.color_transparent));

在这里我恢复颜色

this.mDefaultBackgroundColor = buttonType.styles.get("defaultBackgroundColor");

我有几种类型的按钮,所以每个按钮都有不同的配置。

导致我出现问题的按钮如下

在此处输入图像描述

图像按钮是一个禁用 state 并具有透明背景的按钮,问题在于它在按钮上设置了灰色。

在这里我设置不透明度。

int mColor = mDefaultBackgroundColor;
byte factor = 125;
float alpha = getResources().getFloat(R.dimen.opacity_intense);
float2ByteArray(alpha);
int color = (factor << 24) | (mColor & 0x00ffffff);
disabledDrawable.setColor(color);
disabledDrawable.setStroke(mBorderWidth, mDefaultBackgroundColor);
if (!mEnabled)
    this.setAlpha(.5f);

在材料组件库中,这是一种方法(它至少需要版本1.2.0-beta01 ):

MaterialColors.compositeARGBWithAlpha(color, alpha);

否则,您可以使用androidx.core.graphics.ColorUtils class:

ColorUtils.setAlphaComponent(originalARGB, alpha);

例子:

int color = ColorUtils.setAlphaComponent(
           ContextCompat.getColor(this,R.color....),xx);

int color = MaterialColors.compositeARGBWithAlpha(
           ContextCompat.getColor(this,R.color....),xx);

我终于设法解决了这个问题。 我修改了下面的代码行。

int mColor = mDefaultBackgroundColor;
        int color = mColor;
        disabledDrawable.setColor(color);
        disabledDrawable.setStroke(mBorderWidth, mBorderColor);
        if (!mEnabled)
            this.setAlpha(.5f);

之前是这样

int mColor = mDefaultBackgroundColor;
byte factor = 125;
float alpha = getResources().getFloat(R.dimen.opacity_intense);
float2ByteArray(alpha);
int color = (factor << 24) | (mColor & 0x00ffffff);
disabledDrawable.setColor(color);
disabledDrawable.setStroke(mBorderWidth, mDefaultBackgroundColor);
if (!mEnabled)
   this.setAlpha(.5f);

这是结果

预期结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM