java - 为我的按钮着色的最佳方式?

标签 java android

我目前正在开发一个 android 应用程序,我在其中使用透明的 png 作为用户界面的按钮。

按钮看起来像这样:

enter image description here

当用户按下按钮时,我想自动将图像中的非透明像素着色为较暗的颜色。

目前我使用一个 xml 选择器,每个状态都有不同的可绘制对象。这显然不能很好地缩放,因为我需要在 photoshop 中为每个图像制作多个版本。

有什么解决办法吗?我听说您可以在 ImageView 上使用 setColorFilter 方法来实现此目的,但如果有完整的解释就更好了!

谢谢!

最佳答案

将此图像设置为 ImageButton 的源并使用 xml 状态列表设置 ImageButton 的状态(背景),类似这样

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <shape
            >

            <gradient
                android:startColor="@android:color/background_light"
                android:endColor="@android:color/darker_gray"
                android:angle="90"/>
             <stroke
                android:width="1dp"
                android:color="#999999" />
            <corners
                android:radius="9dp"/>
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp"/>

        </shape>
    </item>

    <item android:state_focused="true">
        <shape>
            <gradient
                android:endColor="@android:color/transparent"
                android:startColor="@android:color/transparent"
                android:angle="270"/>
            <stroke
                android:width="1dp"
                android:color="#989797" />
            <corners
                android:radius="9dp"/>
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp"/>
        </shape>
    </item>

    <item>        
        <shape>
            <gradient
                android:endColor="@android:color/transparent"
                android:startColor="@android:color/transparent"
                android:angle="90"/>
             <stroke
                android:width="1dp"
                android:color="#999999" />
            <corners
                android:radius="9dp"/>
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp"/>
        </shape>
    </item>
</selector>

关于java - 为我的按钮着色的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9376774/

相关文章:

java - springdoc-openapi : How to add example of POST request?

java - 通过标签名称和不知道的包名称在 Android 中打开应用程序。

java - 我们有像 RingCentral API 这样的开源 SMS/调用发送 API 吗?

java.lang.IllegalArgumentException : Comparison Method Violates Its General Contract- Meaning?

java - 映射对象列表以映射

android - 如何每10秒刷新一次Android ListView

java - Android:DatePicker - 跟踪更改日期

android - 双变量格式

android - 是否有可能在 android 中获取 twitter 用户的电子邮件地址?如果是,那么如何?

Android查询ListView图片加载