【问题标题】:Set transparent background of an imageview on Android在 Android 上设置 imageview 的透明背景
【发布时间】:2010-12-02 07:53:53
【问题描述】:

我正在使用一个 Web 视图,并在其中添加一个图像视图。如何将此图像视图的背景设置为透明?

我试过这个:

mImageview.setBackgroundResource(R.color.trans);

在哪里trans<color name="trans">#00000000 </color>

【问题讨论】:

标签: android android-widget


【解决方案1】:

您可以通过在 XML 中添加以下代码来设置任何布局、任何视图或任何组件的背景透明:

android:background="@android:color/transparent" 

【讨论】:

  • 我在旧版本的 Android 上遇到了一个问题,它不能将 #ff000000 处理为纯透明。使用它修复它。
  • 可能是因为#FF 00 00 00 = 100% 黑色。
  • @Ioeschg 前 2 个字母用于 Alpha 通道。 #00xxxxxx 将是透明的,而 x 是您想要的任何十六进制值。
  • 如果有人感兴趣,那么以编程方式等效的是 Android.Resource.Color.Transparent :)
  • @undroid 试试android:background="#00ffffff"
【解决方案2】:

在您的 XML 中,将 Background 属性设置为任何颜色,White(#FFFFFF) 阴影或 Black(#000000) 阴影。如果你想要透明,只需在实际哈希码前加上 80:

#80000000

这会将您想要的任何颜色更改为透明颜色.. :)

【讨论】:

  • @Harshad:是否可以为使用View.setBackgroundResource(R.drawable.something) 设置的背景图像设置例如40% 的透明度?
  • @LuisA.Florit 我发现这个链接你需要乘以 0.4(40/100) 到你的 RGB 值。不确定这是否有帮助,但您可以尝试一下。 forums.esri.com/Thread.asp?c=93&f=1730&t=223940
  • @Harshad:对不起,我不明白你的回答。我没有任何 RGB 值,而是一个带有背景图像的 TextView,我希望它是 50% 透明的。但是,无论如何,我在 * 中找到了答案:View.getBackground().setAlpha(50)。再简单不过了,对吧? :o) 无论如何,谢谢你的帮助!!
  • 如果您在实际哈希码前添加从 01 到 99 的任何数字,它将为您提供透明度。例如:透明度更高的黑色 - #10000000 透明度更低的黑色 - #99000000
  • @AnhSirkDasarp 不仅是从 01 到 99,其余的数字也是十六进制的,因此您可以输入从 00 到 ff 的任何数字。对于 50% 的透明度,您应该输入 80 而不是 50,而对于其他的,您需要进行一些基本计算...
【解决方案3】:

除了Harshad提到的:

两个十六进制字符可以附加到任何十六进制颜色代码。 8 位十六进制颜色代码中的前两个字符表示其在 Android 中的不透明度。

这两个十六进制字符的范围可以从 00 到 FF。例如,

  • 普通不透明黑色十六进制-“#000000”
  • 完全透明 - “#00000000”
  • 完全不透明 - “#FF000000”
  • 50% 透明 - “#7F000000”

通过这种方式,您可以将任何颜色更改为任何级别的透明度。

从百分比中查找十六进制前缀:

将百分比数除以 100 再乘以 255 得到十进制值。将十进制转换为十六进制here

例如,对于 50%,50/100 * 255 = 127。使用链接我们得到十六进制值 7F。

来源:Android: how to create a transparent or opaque background

【讨论】:

  • 实际上,完美的 50% 透明度是 7F 而不是 80 ;)
【解决方案4】:

如果您想添加 20% 或 30% 的透明度,您应该在十六进制代码前附加两个字符,例如 CC。

注意

android:background="#CCFF0088" 在 XML 中

其中CC是alpha值,FF是红色因子,00是绿色因子,88是蓝色因子。

一些不透明代码:

十六进制不透明度值

100% — FF
95% — F2
90% — E6
85% — D9
80% — CC
75% — BF
70% — B3
65% — A6
60% — 99
55% — 8C
50% — 80
45% — 73
40% — 66
35% — 59
30% — 4D
25% — 40
20% — 33
15% — 26
10% — 1A
5%  — 0D
0% —  00

您还可以像这样以编程方式设置不透明度:

yourView.getBackground().setAlpha(127);

将不透明度设置在 0(完全透明)到 255(完全不透明)之间。 127.5 正好是 50%。

您可以使用给定的公式创建任何级别的透明度。如果你想要半透明:

 16 |128          Where 128 is the half of 256.
    |8 -0         So it means 80 is half transparent.

对于 25% 的透明度:

16 |64            Where 64 is the quarter of 256.
   |4 -0          So it means 40 is quarter transparent.

【讨论】:

    【解决方案5】:

    使用下面的黑色代码:

    <color name="black">#000000</color>
    

    现在如果你想使用不透明度,那么你可以使用下面的代码:

    <color name="black">#99000000</color>
    

    下面是不透明代码:

    100% — FF
    95% — F2
    90% — E6
    85% — D9
    80% — CC
    75% — BF
    70% — B3
    65% — A6
    60% — 99
    55% — 8C
    50% — 80
    45% — 73
    40% — 66
    35% — 59
    30% — 4D
    25% — 40
    20% — 33
    15% — 26
    10% — 1A
    5% — 0D
    0% — 00
    

    【讨论】:

      【解决方案6】:

      已经有一个预定义的常量。使用Color.TRANSPARENT

      【讨论】:

      • 使用常量应该是最好/最干净的方法!但在这种情况下,Color.TRANSPARENT 的值设置为0x00000000(不是预期的完全不透明的0xFF000000),所以根据你的处理方式,这个常量可能对实现透明度没有帮助!仍然 +1 推荐一个常数!
      【解决方案7】:

      Android 中已经内置了一个透明:R.color.transparent。 http://developer.android.com/reference/android/R.color.html#transparent

      但我认为您可能希望将放置到 WebView 中的图像的背景设为透明,例如使用透明 PNG,而不是 ImageView 背景。如果实际图像完全不透明,则无法通过它看到 ImageView 背景。

      【讨论】:

      • 图像是透明的..它没有任何背景..我也尝试按照你说的设置 imageview 背景..但它没有用...请帮助..
      • 您能否发布更多详细信息,例如您正在使用的图像的链接以及您正在使用的代码和布局?
      【解决方案8】:

      如果您希望在代码中使用它,只需:

      mComponentName.setBackgroundColor(Color.parseColor("#80000000"));
      

      【讨论】:

        【解决方案9】:

        试试这个代码:)

        它是一个完全透明的十六进制代码 - "#00000000"

        【讨论】:

          【解决方案10】:

          在您的 XML 文件中,设置属性“Alpha”

          android:alpha="0.0" // for transparent
          android:alpha="1.0" // for opaque
          

          您可以提供 0.0 到 1.0 之间的任何十进制值,以应用所需的透明度。例如,0.5 透明度是禁用组件的理想选择

          【讨论】:

            【解决方案11】:

            或者,作为替代,使用以下代码解析资源 ID:

              mComponentName.setBackgroundColor(getResources().getColor(android.R.color.transparent));
            

            【讨论】:

              【解决方案12】:

              在 Android Studio 中,使用内置工具调整颜色和不透明度非常简单:

              【讨论】:

              • 只需点击它。 @PeterMortensen
              【解决方案13】:

              在 xml 中

              @android:color/transparent
              

              在代码中

              mComponentName.setBackgroundResource(android.R.color.transparent)
              

              【讨论】:

                【解决方案14】:

                对于那些仍然面临这个问题的人,你可以试试这个
                element.getBackground().setAlpha(0);

                【讨论】:

                • 我收到了NullPointerException: Attempt to invoke virtual method 'void android.graphics.drawable.Drawable.setAlpha(int)' on a null object reference
                • @IgorGanapolsky: 试着观察你的element 看看它是否是一个空对象
                【解决方案15】:

                一种更简单的方法:

                mComponentName.setBackgroundResource(android.R.color.transparent);
                

                【讨论】:

                  【解决方案16】:

                  使用以下内容以获得完全透明:

                  #00000000
                  

                  当我尝试使用 #80000000 时,我得到了一个我不想要的黑色透明覆盖层。尝试更改前两位数字;它控制透明度级别,例如

                  #00000000
                  #10000000
                  #20000000
                  #30000000
                  

                  【讨论】:

                  • 透明深色上的完美色彩
                  【解决方案17】:

                  我遇到的另一个工作选项是设置android:background="@null"

                  【讨论】:

                    【解决方案18】:

                    您也可以使用View.setAlpha(float) 来精确更改可见性。

                    0 是透明的,1 是完全可见的。 ;)

                    【讨论】:

                    • 这会改变视图的 alpha,而不是它的背景!
                    • 整个视图将是透明的,包括其中的内容/图片,您设置的 alpha 在这种情况下是错误的。用户希望保持图像的透明度而不是将图像更改为透明。
                    【解决方案19】:

                    尝试使用以下代码。它将全面或更多地帮助您。

                    1. 旨在使用此代码设置背景颜色的 .xml 文件:

                      android:background="#000000"
                      

                      android:background="#FFFFFF"
                      

                      或者您也可以通过编程方式进行设置。

                    2. 您也可以通过编程方式使用此代码:

                      image.setBackgroundDrawable(getResources().getDrawable(
                          R.drawable.llabackground));
                      
                    3. 此代码也用于以编程方式设置背景颜色:

                      image.setBackgroundColor(Color.parseColor("#FFFFFF"));
                      
                    4. 此代码以编程方式相同:

                      image.setBackgroundColor(getResources().getColor(Color.WHITE));
                      

                    颜色取决于您选择要用于透明的颜色。主要使用白色或#FFFFFF 颜色。

                    关于R.drawable.llabackground:这行代码适合你的背景风格,比如一些特殊或不同的东西。你也可以用这个。

                    【讨论】:

                      【解决方案20】:

                      如果您使用可绘制的 XML 图像,您可以如下图所示使其透明,或者您可以使用颜色代码:

                      <color name="black">#99000000</color> 
                      

                      【讨论】:

                        【解决方案21】:

                        带有透明度信息的颜色定义可以是格式

                        #AARRGGBB#ARGB

                        您也可以使用较短的值来实现完全透明: #0000

                        其他值例如:

                        white  grey   black
                        #FFFF  #F888  #F000 - full color
                        #EFFF  #E888  #E000
                        #DFFF  #D888  #D000
                        #CFFF  #C888  #C000
                        #BFFF  #B888  #B000
                        #AFFF  #A888  #A000
                        #9FFF  #9888  #9000
                        #8FFF  #8888  #8000
                        #7FFF  #7888  #7000
                        #6FFF  #6888  #6000
                        #5FFF  #5888  #5000
                        #4FFF  #4888  #4000
                        #3FFF  #3888  #3000
                        #2FFF  #2888  #2000
                        #1FFF  #1888  #1000
                        #0FFF  #0888  #0000 - full transparency
                        

                        【讨论】:

                          【解决方案22】:
                          ImageView.setBackground(R.drawable.my_background);
                          
                          ImageView.setBackgroundResource(R.color.colorPrimary);
                          
                          ImageView.getImageAlpha();
                          
                          ImageView.setAlpha(125); // transparency
                          

                          【讨论】:

                          • 虽然这段代码可能有助于解决问题,但它并没有解释为什么和/或如何回答问题。提供这种额外的背景将显着提高其长期价值。请edit您的答案添加解释,包括适用的限制和假设。
                          【解决方案23】:

                          试试这个:

                          #aa000000
                          

                          对于透明度 000000 = 黑色,您可以将这六个数字更改为您想要的颜色。

                          【讨论】:

                          • 在颜色十六进制之前使用 aa 的资源是什么
                          【解决方案24】:

                          使用具有 2 个 imageViews 的 RelativeLayout。并在顶部的imageView上设置透明度代码。

                          透明码:

                          <solid android:color="@color/white"/>
                          <gradient android:startColor="#40000000"   android:endColor="#FFFFFFFF" android:angle="270"/>
                          

                          【讨论】:

                            【解决方案25】:

                            使用任何在线工具 & 将百分比转换为十六进制只需将其添加到颜色值的前面

                            示例:使用https://www.joshuamiron.com/percent-to-hex-converter

                            80% 的不透明度是

                             <color name="opaque_80_percent">#CC000000</color>
                            

                            【讨论】: