有没有办法使用XML设置drawable的Alpha?

像自己一样容易。 我想创build一个alphabutton,这将有一个selectdrawable这种方式:

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Play/Pause --> <item android:state_selected="false" android:drawable="@drawable/item" /> <item android:state_selected="true" android:drawable="@drawable/item" /> </selector> 

我想要做这样的事情:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Play/Pause --> <item android:alpha="125" android:state_selected="false" android:drawable="@drawable/item" /> <item android:alpha="255" android:state_selected="true" android:drawable="@drawable/item" /> </selector> 

感谢所有。

Solutions Collecting From Web of "有没有办法使用XML设置drawable的Alpha?"

我不认为有办法做到这一点。 有一个属性android:alpha ,但它适用于视图,而不是可绘制的。 它仅在API级别11以后才可用。

从OP开始已经有一段时间了,但是我个人发现了一个解决scheme,比我提出的解决scheme要好得多。 创build一个BitmapDrawable使得很容易设置alpha:

 <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/your_drawble" android:alpha="77"> </bitmap> 

Alpha可以是0到255之间的任何值。注意,它是HEX颜色值alpha的倒数,例如70%alpha将是B3中的HEX和BitmapDrawable中的77。

我用drawable实现了同样的效果

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#5000ddff" /> </shape> 

在这里使用alpha 50,它设置不透明度水平。 希望有所帮助

我一直在寻找同样的事情。 虽然这是四年前发布的,但这是search该问题的首选post,所以我会在这里回复。

这是我的解决scheme

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false"> <bitmap android:alpha="@integer/not_pressed_alpha" android:src="@drawable/item"/> </item> <item android:state_pressed="true" android:drawable="@drawable/item" /> </selector> 

对于那些和OP有同样问题的人来说,AppCompat现在允许你设置'alpha'参数,就像他希望在他的目标代码中那样:

  <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Play/Pause --> <item android:alpha="125" android:state_selected="false" android:drawable="@drawable/item" /> <item android:alpha="255" android:state_selected="true" android:drawable="@drawable/item" /> </selector> 

更多信息在这里 。

我的目标是让一个button被选中并按下不同的字母 – 但是使用相同的(png)资源并影响尽可能less的文件。

我的解决scheme类似于改变BitmapDrawable中的alpha,但它从select器中完成,所以只有一个文件受到影响。

使用位图的色调function,请记住,色调将着色现有的像素,所以使用白色。 例如,#80FFFFFF – 保持原来的颜色,但减less50%的alpha这也可以用来改变图标的​​颜色时按下。

这是我可绘制的XML文件:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true"> <bitmap android:src="@drawable/ic_camera" android:tint="#80FFFFFF"> </bitmap> </item> <item android:state_pressed="true"> <bitmap android:src="@drawable/ic_camera" android:tint="#80FFFFFF"> </bitmap> </item> <item> <bitmap android:src="@drawable/ic_camera"> </bitmap> </item> </selector> 

我想你可以创build自己的drawable,可以把这个参数作为参数。 我从来没有做过这样的事情。

看看这个链接:

如何在一个StateListDrawable中设置可绘制的alpha值?

如果这是不可能的,你可以随时在代码中做到这一点…

这里有2个链接,我发现它,如果你想使用位图,而不是: