具有相同图像但不透明度不同的可绘制选择器
Drawable selector with same image but different opacity
我想保存下一个想法的应用 space。但我不确定是否可行。
我想要选择器:
<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 来实现它,但没有成功。有解决办法吗?
无法在 xml 中应用不透明度。只能使用两张图片。
-
您正在使用 PNG 文件,您必须创建 2 个具有不同不透明度的 png。
1º PNG - 启用。 100% 不透明度。
2º PNG - 已禁用。 70% 不透明度。
在此之后,您需要创建一个具有 2 种不同状态的选择器 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% 不透明度)
(Source)
示例:
已启用:
<?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>
如果您使用的是 ShapeDrawable 而不是 PNG,您可以影响您用来设置不同不透明度的颜色,我将概述一些选项:
- 如果您使用的是 ShapeDrawable,则可以使用颜色分配不同的不透明度(颜色字符串中的前 2 个字符是不透明度,即 #ffbada55 是不透明的绿色,#80bada55 是具有一定不透明度的绿色)
这不适用于不透明度,但您可以使用现有的 API 应用滤色器(这可能是基于颜色的效果变化,但仍然不会'允许您更改 PNG 的不透明度)
Color Filter API
创建自定义 PNG,每个都具有您需要的不透明度
我认为(和其他答案一样)选项 #3 最简单,而且效果最好。
最重要的是,您无法使用 XML 更改 PNG 资源的不透明度,您可以创建一个 Drawable(也许将其用作 PNG 的背景),并且您可以更改使用它的颜色资源定义的不透明度。
我想保存下一个想法的应用 space。但我不确定是否可行。
我想要选择器:
<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 来实现它,但没有成功。有解决办法吗?
无法在 xml 中应用不透明度。只能使用两张图片。
-
您正在使用 PNG 文件,您必须创建 2 个具有不同不透明度的 png。
1º PNG - 启用。 100% 不透明度。
2º PNG - 已禁用。 70% 不透明度。
在此之后,您需要创建一个具有 2 种不同状态的选择器 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% 不透明度) (Source)
示例:
已启用:
<?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>
如果您使用的是 ShapeDrawable 而不是 PNG,您可以影响您用来设置不同不透明度的颜色,我将概述一些选项:
- 如果您使用的是 ShapeDrawable,则可以使用颜色分配不同的不透明度(颜色字符串中的前 2 个字符是不透明度,即 #ffbada55 是不透明的绿色,#80bada55 是具有一定不透明度的绿色)
这不适用于不透明度,但您可以使用现有的 API 应用滤色器(这可能是基于颜色的效果变化,但仍然不会'允许您更改 PNG 的不透明度) Color Filter API
创建自定义 PNG,每个都具有您需要的不透明度
我认为(和其他答案一样)选项 #3 最简单,而且效果最好。
最重要的是,您无法使用 XML 更改 PNG 资源的不透明度,您可以创建一个 Drawable(也许将其用作 PNG 的背景),并且您可以更改使用它的颜色资源定义的不透明度。