给我的按钮着色的最好方法是什么?

时间:2012-02-21 11:28:53

标签: java android

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

按钮看起来像这样:

enter image description here

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

目前我使用的xml选择器为每个状态提供不同的drawable。这显然不能很好地扩展,因为我需要在photoshop中为每个图像制作几个版本。

任何解决方案?我听说您可以在ImageView上使用setColorFilter方法来实现这一点,但完整的解释会很棒!

谢谢!

1 个答案:

答案 0 :(得分:2)

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

<?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>