54

容易喜欢自己。我想制作一个 alpha button ,它会以这种方式具有选定的可绘制对象:

<?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>

谢谢大家。

4

8 回答 8

56

自 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>

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

于 2015-03-16T14:02:11.483 回答
51

我使用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,它设置了不透明度级别。希望有帮助

于 2013-08-24T20:29:34.350 回答
19

我一直在寻找同样的东西。尽管这是四年前发布的,但这是谷歌搜索问题时的最高帖子,所以我会在这里回复。

这是我的解决方案

<?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>
于 2016-04-22T12:58:17.577 回答
15

对于那些与 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>

更多信息在这里

于 2016-06-21T14:42:26.047 回答
5

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

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

使用 Bitmap 的 tint 功能,记住 tint 会为现有像素着色,因此请使用白色。例如,#80FFFFFF - 保持颜色为原始颜色,但减少 50% 的 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>
于 2017-01-18T08:30:43.947 回答
1

我同意 Kasium sugest,因此对于某些 Android 版本,Alpha 的 especification 以百分比表示。

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/your_drawble"
    android:alpha="0.5">
</bitmap>
于 2019-06-30T10:41:22.710 回答
1

我正在使用以下自定义单选按钮,当它被禁用时,它应该是对角删除线。

5 个单选按钮的示例图像,其中 4 个已启用

  <item android:state_enabled="false">
    <layer-list>
      <item>
        <shape android:shape="rectangle">
          <size
              android:height="35dp"
              android:width="35dp"/>
          <stroke
              android:color="@color/someGrey"
              android:width="1dp"/>
          <corners android:radius="1dp"/>
        </shape>
      </item>
      <item>
        <rotate
            android:fromDegrees="135"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="135">
          <shape android:shape="line">
            <stroke
                android:color="@color/someGrey"
                android:width="1dp"/>
          </shape>
        </rotate>
      </item>
    </layer-list>
  </item>
于 2019-05-16T09:53:59.110 回答
0

我认为您可以创建自己的可绘制对象,该可绘制对象可以将此参数作为参数。我从来没有做过这样的事情。

看看这个链接:

如何在 StateListDrawable 中为 drawable 设置 alpha 值?

如果这是不可能的,你总是可以在代码中做到这一点......

这是我找到的 2 个链接,以防您希望使用位图:

于 2013-08-24T21:10:12.050 回答