【问题标题】:Change int color opacity in java/android在 java/android 中更改 int 颜色不透明度
【发布时间】:2015-04-13 13:04:03
【问题描述】:

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

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

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

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

感谢您的宝贵时间。

【问题讨论】:

  • @Dahnark 很有可能。
  • 这只是 ColorUtils.setAlphaComponent

标签: java android int transparency alpha


【解决方案1】:

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

【讨论】:

  • 谢谢!这应该是当前接受的答案。
【解决方案2】:

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

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)

【讨论】:

    【解决方案3】:
    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 的代码,因为它更简单。
    【解决方案4】:

    这还不够吗?

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

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

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

    【讨论】:

    • 你能给我一个链接,展示如何使用“&”和“|”的组合。我是 Android 的新手,我想知道理解它(我在其他时候看到过那个符号)。
    • @Dahnark 这是按位运算 en.wikipedia.org/wiki/Bitwise_operation "&" – 按位与。 “|” – 按位或。
    猜你喜欢
    • 2011-10-06
    • 2019-04-14
    • 1970-01-01
    • 2013-04-09
    • 2013-11-08
    • 2018-08-30
    • 2016-06-20
    • 1970-01-01
    • 2014-07-15
    相关资源
    最近更新 更多