Elevation animation on click on CardView

2019-03-27 18:00发布

I want to add the elevation animation to my android.support.v7.widget.CardView, just like the material style Buttons do. I've tried to set a StateListAnimator:

android:stateListAnimator="@anim/selector_raise"

which points to my selector in res/anim:

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

but Android Studio gives me the error:

Element selector must be declared

What's the right way to do that?

2条回答
Lonely孤独者°
2楼-- · 2019-03-27 18:39

I've tried your code, maybe you have simply add the state to second selector element.

So change this line

<item>

with this

<item android:state_enabled="true" android:state_pressed="false">

The complete code will be

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:state_pressed="true">
        <objectAnimator android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ" android:valueTo="@dimen/touch_raise"
            android:valueType="floatType" />
    </item>
    <item android:state_enabled="true" android:state_pressed="false">
        <objectAnimator android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ" android:valueTo="0dp"
            android:valueType="floatType" />
    </item>
</selector>
查看更多
三岁会撩人
3楼-- · 2019-03-27 18:51

You tried to create this .xml in res/anim folder.

You should create on res/animator, if don't exist is easy to create.

But if you search for the problem it already give you a possible solution enter image description here

查看更多
登录 后发表回答