I want to add the elevation animation to my android.support.v7.widget.CardView
, just like the material style Button
s 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?
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>
来源:https://stackoverflow.com/questions/41110936/elevation-animation-on-click-on-cardview