如何设置不透明度(Alpha)的视图在Android

我有一个按钮如下:

<Button
android:text="Submit"
android:id="@+id/Button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>

onCreate()事件中,我像这样调用Button01:

setContentView(R.layout.main);


View Button01 = this.findViewById(R.id.Button01);
Button01.setOnClickListener(this);

在应用程序中有一个背景,我想在这个提交按钮上设置一个不透明度。如何为这个视图设置不透明度?是可以在java端设置,还是可以在main.xml文件中设置?

在java方面,我尝试了Button01.mutate().SetAlpha(100),但它给了我一个错误。

477029 次浏览
android:background="@android:color/transparent"

以上是我所知道的… 我认为创建一个自定义按钮类是最好的主意 < p > API等级11 < br > 最近我遇到了这个android:α xml属性,它的值在0到1之间。对应的方法是setAlpha(浮动)。< / p >

我刚刚发现你的问题,而有类似的问题与TextView。我能够解决它,通过扩展TextView和覆盖onSetAlpha。也许你可以在你的按钮上尝试类似的东西:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;


public class AlphaTextView extends TextView {


public AlphaTextView(Context context) {
super(context);
}


public AlphaTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}


public AlphaTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}


@Override
public boolean onSetAlpha(int alpha) {
setTextColor(getTextColors().withAlpha(alpha));
setHintTextColor(getHintTextColors().withAlpha(alpha));
setLinkTextColor(getLinkTextColors().withAlpha(alpha));
return true;
}
}

我建议你做的是在colors.xml文件中创建一个自定义ARGB颜色,例如:

<resources>
<color name="translucent_black">#80000000</color>
</resources>

然后将按钮背景设置为该颜色:

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

如果你想要处理按钮的形状,你可以做的另一件事是创建一个形状可绘制资源,在那里你设置按钮应该是什么样子的属性:

文件:res /可拉的/ rounded_corner_box.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#80000000"
android:endColor="#80FFFFFF"
android:angle="45"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius="8dp" />
</shape>

然后使用它作为按钮背景:

    android:background="@drawable/rounded_corner_box"

我猜你可能已经找到了答案,但如果没有(对于其他开发人员),你可以这样做:

btnMybutton.getBackground().setAlpha(45);

这里我将不透明度设置为45。你基本上可以从0(完全透明)到255(完全不透明)之间的任意值设置它。

我对其他人更复杂的答案感到惊讶。

XML

你可以非常简单地在你的xml中按钮(或任何其他视图)的颜色定义中定义alpha:

android:color="#66FF0000"    // Partially transparent red

在上面的例子中,颜色是部分透明的红色。

在定义视图的颜色时,格式可以是#RRGGBB#AARRGGBB,其中AA是十六进制alpha值。FF是完全不透明的,而00是完全透明的。

动态

如果您需要动态更改代码中的不透明度,请使用

myButton.getBackground().setAlpha(128);  // 50% transparent

其中INT的范围从0(完全透明)到255(完全不透明)。

我知道这已经有一堆答案,但我发现,对于按钮,它只是最简单的创建自己的.xml选择器,并将其设置为该按钮的背景。这样你也可以在按下或启用时改变它的状态。下面是我使用的一个简短的片段。如果你想为任何颜色添加透明度,添加一个前导十六进制值(#XXcccccc)。(XX == "alpha of color")

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<solid
android:color="#70c656" />
<stroke
android:width="1dp"
android:color="#53933f" />
<corners
android:radius="4dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="#70c656"
android:endColor="#53933f"
android:angle="270" />
<stroke
android:width="1dp"
android:color="#53933f" />
<corners
android:radius="4dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>

我在ICS/JB中遇到过这个问题,因为Holo主题的默认按钮由略透明的图像组成。作为背景,这一点尤其明显。

姜饼vs. ICS+:

姜饼 ICS

复制每个分辨率下的所有可绘制状态和图像,并使透明图像实心是一种痛苦,所以我选择了一个更脏的解决方案:将按钮包裹在有白色背景的支架中。这是一个粗糙的XML绘图(ButtonHolder),它正是这样做的:

XML文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/Content">
<RelativeLayout style="@style/ButtonHolder">
<Button android:id="@+id/myButton"
style="@style/Button"
android:text="@string/proceed"/>
</RelativeLayout>
</LinearLayout>

ButtonHolder.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/white"/>
</shape>
</item>


</layer-list>

styles.xml

.
.
.
<style name="ButtonHolder">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:background">@drawable/buttonholder</item>
</style>


<style name="Button" parent="@android:style/Widget.Button">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textStyle">bold</item>
</style>
.
.
.

然而,这将导致白色边框,因为Holo按钮图像包括空白,以说明按下的空间:

Too much white pressed Too much white pressed

所以解决方案是给白色背景一个边距(对我来说是4dp)和圆角(2dp),以完全隐藏白色,但使按钮坚固:

ButtonHolder.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">


<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
</shape>
</item>


<item android:top="4dp" android:bottom="4dp" android:left="4dp" android:right="4dp">
<shape android:shape="rectangle">
<solid android:color="@color/white"/>
<corners android:radius="2dp" />
</shape>
</item>


</layer-list>

最终结果是这样的:

No white No white pressed

你应该针对v14+使用这种风格,而针对Gingerbread/Honeycomb调整或排除它,因为它们的原生按钮图像大小与ICS和JB的不同(例如,姜饼按钮后面的这种风格导致按钮下面有一小块白色)。

根据android docs视图,alpha值介于0和1之间。所以要像这样设置它:

View v;
v.setAlpha(.5f);

虽然btnMybutton.getBackground().setAlpha(45);是一个很好的想法,但它只是将alpha应用于背景,而不是整个视图。

如果你想将alpha应用于视图,请使用btnMybutton.setAlpha(0.30f);。这应用不透明度的视图。它接受0到1之间的值。

医生说:

设置视图的不透明度。这是一个从0到1的值,其中0 表示视图是完全透明的,1表示视图是透明的 完全不透明。如果这个视图覆盖onSetAlpha(int)返回 正确,那么这个视图负责应用不透明度本身。 否则,调用此方法等同于调用 setLayerType(int, android.graphics.Paint)和设置硬件 层。注意,将alpha设置为半透明值(0 <α& lt;1) 可能会影响性能。通常最好使用 稀疏的,短暂的:有节制的和短暂的阿尔法性质,如在衰落的情况下 动画。< / p >

API <11为textView颜色我做了以下:

int textViewColor = textView.getTextColors().getDefaultColor();
textView.setTextColor(Color.argb(128, Color.red(textViewColor), Color.green(textViewColor), Color.blue(textViewColor))); //50% transparent

有点麻烦,但嘿,它工作:-)

对于视图,您可以通过以下方法设置不透明度。

view_name.setAlpha(float_value);

属性view.setAlpha(int)对于大于11的API版本已弃用。此后,将使用.setAlpha(0.5f)这样的属性。

比上面简单多了。 按钮

的默认alpha属性
android:alpha="0.5"

范围是0表示完全透明,1表示完全不透明。

如果你使用芬兰湾的科特林,像这样设置alpha是很容易的

imageView.alpha= 0.5F

其中值必须为浮动数量