Android 中按钮的点击效果

515 查看

Android 中按钮点击后的效果通常是通过更换图片,或者背景色来实现的。

之前做的一直都是手动写在点击事件里,今天发现了一种更合适的方法,写在xml文件中。

比如,我有两张图片,一张是点击前的before_press,一张是点击后的after_press。
实现的方法:在drawable文件夹中建立一个文档,如button_press.xml.

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

    <item
            android:state_pressed="true"
            android:drawable="@drawable/after_press"/>
    <item
            android:state_pressed="false"
            android:drawable="@drawable/before_press"/>
</selector>

然后在按钮处
android:background="@drawable/button_selector"

然后点击事件就完成啦。

另外,如果想修改背景颜色,需要在values文件夹中新建colors文件。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="opaque_red">#f00</color>
    <color name="background">#FFFFFF</color>
</resources>

然后将drawable改为对应的@color/background即可。

补充:

直接改变颜色会显得很突兀,所以需要通过一种颜色渐变到方式来达到目的。

定义两个shape,一个没按的,一个按下后的。
shape_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#808080"
        android:endColor="#808080"
        android:angle="-90"/>
</shape>

shape_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FF7F00"
        android:endColor="#EE7600"
        android:angle="-90"/>
</shape>

然后依然定义button_selector.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
            android:state_pressed="true"
            android:drawable="@drawable/shape_pressed"/>
    <item
            android:state_pressed="false"
            android:drawable="@drawable/shape_normal"/>
</selector>

注意,不能直接写类似#FFFFFF 之类的到drawable中