Android 如何使用StateListAnimator?
从: 新的StateListAnimator类允许您定义运行 当视图的状态更改时。下面的示例演示如何 将StateListAnimator定义为XML资源:Android 如何使用StateListAnimator?,android,android-5.0-lollipop,Android,Android 5.0 Lollipop,从: 新的StateListAnimator类允许您定义运行 当视图的状态更改时。下面的示例演示如何 将StateListAnimator定义为XML资源: 但是,它没有说明如何实际使用这个xml文件。Resources类上似乎没有方法获取StateListAnimator,而StateListAnimator类也不提供任何信息 我们如何使用它?在Android L中,为查看添加了一个新的xml属性: 此外,为了以编程方式实例化StateListAnimator对象,还需要一个新方法: lo
但是,它没有说明如何实际使用这个xml文件。Resources
类上似乎没有方法获取StateListAnimator
,而StateListAnimator
类也不提供任何信息
我们如何使用它?在Android L中,为查看添加了一个新的xml属性:
此外,为了以编程方式实例化StateListAnimator对象,还需要一个新方法:
loadStateListAnimator(Context context, int id)
已添加到AnimatorInflater
这些可以在Android L开发者预览文档包中找到。我在java中使用这些代码,效果很好
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
crd.setStateListAnimator(AnimatorInflater.loadStateListAnimator(ctx,
R.drawable.card_smooth_shadow));
}
还有我的动画师/card\u smooth\u 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>
结果
允许您根据视图的可绘制状态定义将在附加视图上运行的多个动画师 可以使用元素在XML文件中定义它。每个状态动画都在嵌套元素中定义 新的StateListAnimator类允许您定义在视图状态更改时运行的动画。以下示例显示如何将StateListAnimator定义为XML资源:
对于代码片段,请尝试StateListAnimator sla=AnimatorInflater.loadStateListAnimator(上下文,R.anim.my_anim);View.setStateListAnimator(sla);比如说,为什么AppBarLayout有一个默认的stateListAnimator?什么时候换过?默认情况下,它有哪些状态?如何与animator产生连锁反应?@aNdRO博士不是
StateListAnimator
,但要将这种效果应用于任何视图,在布局中使用android:background=“?selectableItemBackground”
@TimKist也可以,但StateListAnimator的主要用途是阴影效果。正如您所看到的,当我们点击(或按住)卡片查看时,阴影会增加。谢谢@Radesh。我指的是安德罗博士所问的连锁反应,不是你的答案。这是一个很好的解释
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
crd.setStateListAnimator(AnimatorInflater.loadStateListAnimator(ctx,
R.drawable.card_smooth_shadow));
}
<?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>