如何使用StateListAnimator?

时间:2014-06-27 18:27:56

标签: android android-5.0-lollipop

来自docs

  

新的StateListAnimator类允许您定义运行的动画师   当视图状态发生变化时。以下示例说明如何操作   将StateListAnimator定义为XML资源:

<!-- 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>

但是,它没有说明如何实际使用这个xml文件。 Resources类似乎没有方法可以获得StateListAnimator,而StateListAnimator类也没有提供任何信息。

我们如何使用它?

3 个答案:

答案 0 :(得分:24)

Android L 中,为查看添加了新的xml属性:

android:stateListAnimator   : Sets the state-based animator for the View.

此外,以编程方式将 StateListAnimator 对象实例化为一种新方法:

loadStateListAnimator(Context context, int id)

已添加到 AnimatorInflater

这些可以在 Android L 开发人员预览文档包中找到。

答案 1 :(得分:4)

我在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_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

答案 2 :(得分:0)

允许您定义多个动画器,这些动画器将根据视图的可绘制状态在附加的视图上运行。

它可以在带有元素的 XML 文件中定义。每个 State Animator 都定义在一个嵌套元素中。

新的 StateListAnimator 类允许您定义在视图状态更改时运行的动画器。以下示例显示了如何将 StateListAnimator 定义为 XML 资源: https://indiacodinghub.blogspot.com/2021/01/how-to-use-statelistanimator.html