【问题标题】:Programmatically make a color more transparent以编程方式使颜色更透明
【发布时间】:2013-06-18 17:23:59
【问题描述】:

我正在开发一个简单的条形图应用程序,它使用静态颜色数组来划分条形颜色。我想要正常绘制条形或稍微透明的功能。

有没有办法以编程方式调整颜色整数,使其略微透明?还是我必须静态定义每种颜色的透明版本,然后在需要透明时切换到使用这些版本?

【问题讨论】:

标签: android colors transparent


【解决方案1】:

如果你正在使用支持库,你可以使用:

ColorUtils.setAlphaComponent(int color, int alpha);

如果您不使用支持库,则从其源代码中获取的一行解决方案是:

int res = (color & 0x00ffffff) | (alpha << 24);

【讨论】:

  • 这应该是正确的答案。它更简单,只要 alpha int 在 0 到 250 之间,setAlphaComponent 就可以很好地工作。
  • 更准确地说,I'm_With_Stupid 介于 0 和 255 之间
  • ColorUtils.setAlphaComponent 在此问题发布约 2 年后被添加到 API (22.1)。整个 ColorUtils 类中有一大堆整洁的东西。现在任何在这个线程上绊倒的人都会很好地对其进行审查 (developer.android.com/reference/android/support/v4/graphics/…)
  • 这是唯一的解决办法!
【解决方案2】:

当然...看看颜色,有一个功能:

static int   argb(int alpha, int red, int green, int blue)

从 alpha、red、green、blue 分量返回一个 color-int。

因此您的 RGB 值可能是静态的,您只需调整 alpha 值即可获得新的透明版本的颜色。

【讨论】:

【解决方案3】:

您好,您可以使用:

android.support.v4.graphics.ColorUtils#setAlphaComponent

注意:这里的 alpha 是从 0 到 255,而不是基于 %。

还有其他的实用方法,比如合约和光度计算。

问候

【讨论】:

    【解决方案4】:

    试试下面的代码

    int color = (int)Long.parseLong(your_color, 16);
    int r = (color >> 16) & 0xFF;
    int g = (color >> 8) & 0xFF;
    int b = (color >> 0) & 0xFF;
    

    如果颜色代码有 alpha 则

    int alpha= (color >> 24) & 0xFF;
    

    【讨论】:

      【解决方案5】:

      从上面的答案我创建了一个方法来做到这一点:

      private Android.Graphics.Color AddTransparencyToColour(Android.Graphics.Color color, int transparancy)
      {
          return Android.Graphics.Color.Argb(transparancy, color.R, color.G, color.B);
      }
      

      另外值得注意的是,这可以改成这样的扩展方法

      public static ColorExtensions
      {
          public static Android.Graphics.Color AddTransparency(this Android.Graphics.Color color, int transparancy)
          {
              return Android.Graphics.Color.Argb(transparancy, color.R, color.G, color.B);
          }
      }
      

      关于 alpha 值,来自MSDN Color.FromArgb

      备注

      要创建不透明的颜色,请将 alpha 设置为 255。要创建一个 半透明颜色,将 alpha 设置为 1 到 254 之间的任何值。

      【讨论】:

        猜你喜欢
        • 2013-06-12
        • 1970-01-01
        • 1970-01-01
        • 2018-11-26
        • 2015-12-06
        • 2021-03-31
        • 1970-01-01
        • 1970-01-01
        • 2019-02-12
        相关资源
        最近更新 更多