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

A.Q*_*oga 47 android alpha-transparency drawable

容易就像自己.我想制作一个alpha按钮,这样就可以选择drawable:

<?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>
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

<?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>
Run Code Online (Sandbox Code Playgroud)

谢谢大家.

Kas*_*ium 52

自OP以来已经有一段时间了,但个人发现了一个比我建议的答案更好的解决方案.创建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>
Run Code Online (Sandbox Code Playgroud)

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

  • 实际,xml中的alpha是浮点类型,它应该是介于0.0和1.0之间的值. (13认同)
  • 请注意,这仅适用于API级别11+ (4认同)
  • @liuyong对于视图可能是真的,但不适用于`<bitmap>`.设置`<bitmap>`的"alpha"的能力是当前未记录的功能,可能或可能不起作用.这个值也没有真正代表传统意义上的alpha值,而是它的oposite,不透明度,这就是为什么 - 如果它恰好起作用 - 你会得到一个完全透明的位图,值为255和完全不透明度值为0. (3认同)
  • 这仅适用于实际图像,不适用于任何 Drawable(例如颜色)。 (2认同)

Pra*_*ant 43

我使用drawable实现了同样的目标

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

在这里使用alpha 50,它设置不透明度级别.希望有所帮助

  • 十六进制值成对描述.前2代表alpha(对于Android无论如何,有时它是最后2).接下来的3对代表红色 - 蓝色 - 绿色```#5000ddff alpha(50)红色(00)蓝色(dd)绿色(ff)``` (3认同)
  • 答案是正确的,但 50% alpha 的十六进制为 256/2 = 128,因此 **#80** (3认同)
  • 我没有得到它,它是如何改变一个可绘制的阿尔法? (2认同)

Fre*_*alf 15

我一直在寻找同样的事情.即使这是四年前发布的,这是谷歌搜索问题的最高职位,所以我会在这里回复.

这是我的解决方案

<?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>
Run Code Online (Sandbox Code Playgroud)


kik*_*tas 13

对于那些与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>
Run Code Online (Sandbox Code Playgroud)

更多信息在这里.

  • "从API 23开始,项目可以选择定义android:alpha属性" (2认同)

Ted*_*opp 9

我认为没有办法做到这一点.有一个属性android:alpha,但它适用于视图,而不是drawable.它自API级别11以来才可用.

  • 我在选择器里面的`<bitmap />`中使用`android:alpha ="0.6"`,但它不能在API级别20及以下版本上运行.请建议我一些替代方案. (4认同)

小智 5

我的目标是让一个按钮在不同的 alpha 下具有选择和按下状态 - 但使用相同的 (png) 资源并影响尽可能少的文件。

我的解决方案类似于更改 BitmapDrawable 中的 alpha - 但它是从选择器中执行的,因此只有一个文件受到影响。

使用位图的色调功能,请记住色调会给现有像素着色,因此请使用白色。例如,#80FFFFFF - 保持颜色不变,但将 alpha 减少 50% 这也可用于在按下时更改图标的颜色。

这是我的可绘制 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>
Run Code Online (Sandbox Code Playgroud)