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

时间:2011-11-18 07:45:05

标签: android drawable alpha-transparency

很容易就像自己一样。我想制作一个alpha按钮,这样就可以选择绘图:

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

谢谢大家。

9 个答案:

答案 0 :(得分:49)

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

答案 1 :(得分:42)

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

答案 2 :(得分:14)

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

这是我的解决方案

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

答案 3 :(得分:10)

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

更多信息here

答案 4 :(得分:9)

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

答案 5 :(得分:3)

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

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

使用Bitmap的色调功能,请记住色调会为现有像素着色,因此请使用白色。 例如,#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>

答案 6 :(得分:1)

我将以下内容用于自定义单选按钮,该按钮在禁用时应沿对角线删除。

Example Image of 5 radio buttons where 4 of them are enabled

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

答案 7 :(得分:0)

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

查看此链接:

How to set alpha value for drawable in a StateListDrawable?

如果不可能,您可以随时在代码中进行...

这里有2个我发现的链接,如果你想改用位图:

答案 8 :(得分:0)

我同意Kasium sugest,所以在某些Android版本中,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="0.5">
</bitmap>