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

9vw9lbht  于 2022-12-28  发布在  Android
关注(0)|答案(9)|浏览(171)

简单就像它本身。我想做一个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>

谢谢你们。

qmelpv7a

qmelpv7a1#

OP已经有一段时间了,但我个人发现了一个解决方案,比建议的答案更适合我。创建一个BitmapDrawable make可以很容易地设置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。

xxslljrj

xxslljrj2#

我用一个可绘制的

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

在这里使用了alpha 50,它设置不透明度级别。

e5njpo68

e5njpo683#

我一直在寻找同样的东西。即使这是张贴超过四年前,这是最高职位时,谷歌的问题,所以我会在这里回复。
这就是我的解决方案

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

icnyk63a4#

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

lsmepo6l

lsmepo6l5#

我的目标是让一个按钮在不同的alpha下有它的选择和按下状态-但是使用相同的(png)资源并且影响尽可能少的文件。
我的解决方案类似于改变BitmapDrawable中的alpha--但它是从选择器中进行的,因此只会影响一个文件。
使用位图的色调功能,记住色调会给现有像素着色,所以使用白色。例如,#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>
wd2eg0qa

wd2eg0qa6#

我使用下面的自定义单选按钮,当它被禁用时,应该是对角线删除线。
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>
lskq00tm

lskq00tm7#

我同意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>
vom3gejh

vom3gejh8#

我想你可以创建你自己的drawable,它可以把这个参数作为一个参数。虽然我从来没有做过这样的事情。
查看此链接:
How to set alpha value for drawable in a StateListDrawable?
如果这不可能,你可以用代码来做...
这里有2个链接我已经找到了关于它,在情况下你希望使用位图代替:

gcuhipw9

gcuhipw99#

它不是那么简单,但它可能:
首先,你必须定义颜色文件夹中的颜色你的资源,像这样:
color/inst_control_pressed_transp.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:alpha="0.5" android:color="?attr/inst_control_pressed" />
</selector>

现在,您可以从某个形状引用该颜色:
drawable/background_clear_pressed.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid
        android:color="@color/inst_control_pressed_transp" />
</shape>

您可以使用它在drawable:
drawable/background_bordered_clear_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/background_clear_pressed" android:state_pressed="true" android:state_selected="false" />
    <item android:drawable="@drawable/background_clear_active" android:state_activated="true" />
    <item android:drawable="@drawable/background_clear_selected" android:state_selected="true" />
    <item android:drawable="@drawable/background_bordered_clear_round" />
</selector>

相关问题