在Java/Android中更改整数颜色的不透明度

12

我想改变使用下面代码从我的主题中获取的颜色的透明度:

TypedValue typedValueDrawerSelected = new TypedValue();
getTheme().resolveAttribute(R.attr.colorPrimary, typedValueDrawerSelected, true);
int colorDrawerItemSelected = typedValueDrawerSelected.data;

我希望colorDrawerItemSelected保持相同的颜色,但是它的透明度应该是25%。

我找到了一些从imageView获取rgb颜色的解决方案,但我没有imageView。

感谢您的时间。


@Dahnark 这是完全有可能的。 - Rahul Sainani
这只是一个ColorUtils.setAlphaComponent。 - Fattie
4个回答

24

这样不就足够了吗?

colorDrawerItemSelected = (colorDrawerItemSelected & 0x00FFFFFF) | 0x40000000;

它保存了颜色值并将透明度设置为最大值的25%。

颜色整数中的第一个字节负责透明度:0 - 完全透明,255(0xFF)- 不透明。在第一部分中("&"操作),我们将第一个字节设置为0,保留其他字节不变。在第二部分中,我们将第一个字节设置为0x40,这是0xFF(255 / 4 ≈ 64)的25%。


1
你能给我一个链接展示如何使用"&"和"|"的组合吗?我是Android的新手,想要了解它(我之前也看到过这些符号)。 - JavierSegoviaCordoba
2
@Dahnark 这是位运算 https://zh.wikipedia.org/wiki/%E4%BD%8D%E6%93%8D%E4%BD%9C "&" - 位与。 "|" - 位或。 - Sergey Glotov

17

我在我的应用程序中使用这种方法:

private int getTransparentColor(int color){
    int alpha = Color.alpha(color);
    int red = Color.red(color);
    int green = Color.green(color);
    int blue = Color.blue(color);

    // Set alpha based on your logic, here I'm making it 25% of it's initial value. 
    alpha *= 0.25;

    return Color.argb(alpha, red, green, blue);
}

你还可以使用来自支持库的ColorUtils.alphaComponent(color, alpha)方法。


15

使用ColorUtils.setAlphaComponent(color,alpha)轻松地将alpha值设置为颜色。 ColorUtils类位于android support库中。


1
谢谢!这应该是当前被接受的答案。 - dknchris

6
int[] attrs = new int[] { android.R.attr.colorPrimary };
TypedArray a = obtainStyledAttributes(attrs);
int colorPrimary = a.getColor(0, 0);
a.recycle();

现在您可以通过更新最高的8个位来更改colorPrimary的不透明度:

//set new color
int newColor = (colorPrimary & 0x00FFFFFF) | (0x40 << 24);

谢谢你 :) 但我使用了 Sergey 的代码,因为它更简单。 - JavierSegoviaCordoba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接