From the docs:
The new StateListAnimator class lets you define animators that run when the state of a view changes. The following example shows how to define an StateListAnimator as an XML resource:
<!-- animate the translationZ property of a view when pressed --> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<set>
<objectAnimator android:propertyName="translationZ"
android:duration="100"
android:valueTo="2"
android:valueType="floatType"/>
<!-- you could have other objectAnimator elements
here for "x" and "y", or other properties -->
</set>
</item>
<item android:state_enabled="true"
android:state_pressed="false"
android:state_focused="true">
<set>
<objectAnimator android:propertyName="translationZ"
android:duration="100"
android:valueTo="2"
android:valueType="floatType"/>
</set>
</item>
</selector>
However, it says nothing about how to actually use this xml file. There seems to be no method on the Resources
class to get a StateListAnimator
, and the StateListAnimator
class does not provide any info either.
How can we use this?
In Android L a new xml attribute has been added for View :
android:stateListAnimator : Sets the state-based animator for the View.
Additionally for instantiating StateListAnimator object programmatically a new method :
loadStateListAnimator(Context context, int id)
has been added to AnimatorInflater .
These can be found on Android L developer preview documentation package.
I use this code in java and works fine
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
crd.setStateListAnimator(AnimatorInflater.loadStateListAnimator(ctx,
R.drawable.card_smooth_shadow));
}
And my animator/card_smooth_shadow.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<set>
<objectAnimator android:propertyName="translationZ"
android:duration="@android:integer/config_shortAnimTime"
android:valueTo="10dp"
android:valueType="floatType"/>
</set>
</item>
<item
android:state_pressed="false">
<set>
<objectAnimator android:propertyName="translationZ"
android:duration="100"
android:valueTo="2dp"
android:valueType="floatType"/>
</set>
</item>
RESULT
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With