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

时间:2015-01-26 15:23:35

标签: android xml drawable

我想用下一个想法保存应用空间。但我不确定是否可能。

我想要选择器:

<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绘制来实现它,但没有成功。有解决方案吗?

2 个答案:

答案 0 :(得分:5)

无法在xml中应用不透明度。只能使用两张图片。

-

您正在使用PNG文件,您必须创建具有不同不透明度的2个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%不透明度) (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>

答案 1 :(得分:1)

如果你使用的是ShapeDrawable而不是PNG,你可以影响你用来设置不同不透明度的颜色,我将概述一些选项:

  1. 如果你使用的是ShapeDrawable,你可以使用颜色指定不同的不透明度(颜色字符串中的前2个字符是不透明度,即。#ffbada55不是不透明绿色,#80bada55是绿色,有一些不透明度)< / LI>
  2. 这不适用于不透明度,但您可以使用存在的API应用滤色器(这可能是基于颜色的效果的变化,但仍然不允许您更改不透明度你的PNG) Color Filter API

  3. 创建自定义PNG,每个PNG都具有您需要的不透明度

  4. 我认为(与其他答案一样)选项#3最简单,并且效果最好。

    最重要的是,您无法使用XML更改PNG资源的不透明度,您可以创建一个Drawable(可能将其用作PNG的背景),并且您可以使用它更改其不透明度色彩资源定义。