Reputation: 100448
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?
Upvotes: 27
Views: 32121
Reputation: 1
Lets you define a number of Animators that will run on the attached View depending on the View's drawable state.
It can be defined in an XML file with the element. Each State Animator is defined in a nested element.
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: https://indiacodinghub.blogspot.com/2021/01/how-to-use-statelistanimator.html
Upvotes: -1
Reputation: 13575
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
Upvotes: 16
Reputation: 6073
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.
Upvotes: 27