【问题标题】:Drawable selector with same image but different opacity具有相同图像但不透明度不同的可绘制选择器
【发布时间】:2015-01-26 15:23:35
【问题描述】:

我想通过下一个想法节省应用空间。但我不确定是否可能。

我想要选择器:

<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 来实现它,但没有成功。有解决办法吗?

【问题讨论】:

    标签: android xml drawable


    【解决方案1】:

    没有办法在 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>
    

    【讨论】:

    • 嗨@Alisson,谢谢你的回答。我知道我可以使用两张图片。问题是我是否可以使用一张图像并在 xml drawable 中定义一些不透明度
    • 无法在 xml 中应用不透明度。只能使用两张图片。
    【解决方案2】:

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

    1. 如果您使用的是 ShapeDrawable,您可以使用颜色分配不同的不透明度(颜色字符串中的前 2 个字符是不透明度,即。#ffbada55 是没有不透明度的绿色,#80bada55 是具有一些不透明度的绿色)
    2. 这不适用于不透明度,但您可以使用现有的 API 应用颜色过滤器(这可能是基于颜色的效果变体,但仍不允许您更改不透明度你的PNG) Color Filter API

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

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

    底线,您不能使用 XML 更改 PNG 资源的不透明度,您可以创建一个 Drawable(也许将其用作 PNG 的背景),并且您可以使用它来更改它的不透明度颜色资源定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      相关资源
      最近更新 更多