在java/android中更改int颜色不透明度

Jav*_*oba 8 java int transparency android alpha

我正在尝试使用下一个代码更改我的主题颜色的不透明度:

TypedValue typedValueDrawerSelected = new TypedValue();
getTheme().resolveAttribute(R.attr.colorPrimary, typedValueDrawerSelected, true);
int colorDrawerItemSelected = typedValueDrawerSelected.data;
Run Code Online (Sandbox Code Playgroud)

我想要colorDrawerItemSelected保持相同的颜色,但它的alpha应该是25%.

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

感谢您的时间.

Ser*_*tov 18

这不够吗?

colorDrawerItemSelected = (colorDrawerItemSelected & 0x00FFFFFF) | 0x40000000;
Run Code Online (Sandbox Code Playgroud)

它保存颜色值并将alpha设置为最大值的25%.

color int中的第一个字节负责透明度:0 - 完全透明,255(0xFF) - 不透明.在第一部分("&"操作)中,我们将第一个字节设置为0并保持其他字节不变.在第二部分中,我们将第一个字节设置为0x40,即0xFF的25%(255 /4≈64).

  • @Dahnark 这是按位运算 https://en.wikipedia.org/wiki/Bitwise_operation "&" – 按位与。“|” – 按位或。 (2认同)

Mat*_*sch 10

使用 ColorUtils.setAlphaComponent(color, alpha) 将 alpha 值设置为简单的颜色。ColorUtils 类位于 android 支持库中。


Rah*_*ani 8

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

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);
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用支持lib中的ColorUtils.alphaComponent(颜色,alpha).


Kar*_*uri 6

int[] attrs = new int[] { android.R.attr.colorPrimary };
TypedArray a = obtainStyledAttributes(attrs);
int colorPrimary = a.getColor(0, 0);
a.recycle();
Run Code Online (Sandbox Code Playgroud)

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

//set new color
int newColor = (colorPrimary & 0x00FFFFFF) | (0x40 << 24);
Run Code Online (Sandbox Code Playgroud)