Android动画<第四篇>:属性动画之StateListAnimator(视图状态动画)

给按钮添加点击效果:

低版本SDK点击按钮是没有任何效果的,在高版本SDK默认添加了水波纹效果,如图:

100.gif

当然,我们可以修改它的颜色,也可以重新自定义一个水波纹动画,有关这个效果请查看这篇博客。

Android动画<第五篇>:触摸反馈动画

您可能经常使用selector设置按钮的背景:

<Button
    android:id="@+id/bt_cardview"
    android:layout_width="200dp"
    android:layout_height="100dp"
    android:layout_centerInParent="true"
    android:stateListAnimator="@color/colorPrimary"
    android:background="@drawable/bg_select"
    android:text=""/>

selectorshape结合

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape>
            <solid android:color="#D67B5E" />
            <stroke android:width="5dp" android:color="#E94612"/>
            <corners android:radius="5dp"/>
        </shape>
    </item>

    <item android:state_pressed="true">
        <shape>
            <solid android:color="#966DDF" />
            <stroke android:width="5dp" android:color="#5E18DA"/>
            <corners android:radius="5dp"/>
        </shape>
    </item>
</selector>

效果如下:

101.gif

接下来开始讲解StateListAnimator了,StateListAnimator可以让按钮真正的起来,下面我们来实现按钮点击上下起伏的效果。

在View中有个stateListAnimator属性,可以在xml中设置:

<Button
    android:id="@+id/bt_cardview"
    android:layout_width="200dp"
    android:layout_height="100dp"
    android:layout_centerInParent="true"
    android:stateListAnimator="@animator/bg_select"
    android:text=""/>

bg_select.xml这个文件存放在animator文件夹中,如图:

图片.png

在这个文件中可以添加动画效果,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <set>
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleX"
                android:valueTo="1.0"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleY"
                android:valueTo="1.0"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:valueTo="0dp"
                android:valueType="floatType" />
        </set>
    </item>

    <item android:state_pressed="true">
        <set>
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleX"
                android:valueTo="1.025"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleY"
                android:valueTo="1.025"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:valueTo="4dp"
                android:valueType="floatType" />
        </set>
    </item>
</selector>

最终按钮的点击效果为:

102.gif

OK,轻松实现按钮起伏效果。需要提醒的是,上图效果我没有给他设置背景和前景,只是添加了动画效果,想要添加什么背景可以自由发挥。

[本章完...]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容