具有相同图像但不同不透明度的可绘制选择器

5

我希望通过下一个想法来节省应用程序空间。但我不确定是否可能实现。

我想要一个选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/arrow_forward" android:state_enabled="true" />
  <item android:drawable="@drawable/arrow_forward_disabled" android:state_enabled="false"/>
</selector>

arrow_forward是一张PNG图片,而arrow_forward_disabled则是同样的图片,但透明度为70%。我尝试使用layer-list drawable来实现,但没有成功。有解决方法吗?

2个回答

5

在xml中无法应用不透明度。只能使用两个图像来实现。

-

您正在使用PNG文件,需要创建两个具有不同不透明度的png文件。

1º PNG - 启用。100%不透明度。

2º PNG - 禁用。70%不透明度。

之后,您需要创建一个带有两个不同状态的选择器XML:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/btn_disabled" />
    <item android:drawable="@drawable/btn_active" />
</selector>

你还可以使用带有不同透明度的形状按钮,使用ARGB的alpha值(#AARRGGBB)。例如:#80FFFFFF(50% 不透明度) (来源)

示例:

启用:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners android:radius="20dp"/>
    <solid android:color="#002aff" />
</shape>

禁用状态(70%不透明度:#b3002aff):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners android:radius="20dp"/>
    <solid android:color="#b3002aff" />
</shape>

嗨 @Alisson,谢谢你的回答。我知道我可以使用两张图片。问题是我能否使用一张图片并在 xml drawable 中定义一些不透明度。 - Eugen Martynov
在 XML 中没有办法应用不透明度,只能使用两个图像来实现。 - Alisson M. Vargas

2
如果您正在使用ShapeDrawable而不是PNG,则可以通过影响所使用的颜色来设置不同的透明度。以下是一些选项:
1. 如果您正在使用ShapeDrawable,则可以使用颜色分配不同的透明度(颜色字符串中的前两个字符是透明度,例如#ffbada55表示没有透明度的绿色,#80bada55表示带有一定透明度的绿色)。 2. 您可以使用现有的API应用颜色滤镜(这可能是基于颜色的变化的变体,但仍无法更改PNG的透明度)。 3. 创建具有所需透明度的自定义PNG。
我认为(与其他答案一样),选项3最简单且效果最佳。总之,您无法使用XML更改PNG资源的透明度,但可以创建一个Drawable(可能将其用作PNG的背景),并能够使用其颜色资源定义更改其透明度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接