如何在我的应用程序中使用StateListAnimator

时间:2015-07-21 15:25:03

标签: android animation state

我想在我的应用程序中为按钮制作动画。 最近听说过StateListAnimator 告诉我有关StateListAnimator的更多信息 我如何在我的应用程序中使用它?

1 个答案:

答案 0 :(得分:0)

您可以使用StateListAnimator在视图状态发生变化时提供动画。从:

https://developer.android.com/training/material/animations.html

  

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="@android:integer/config_shortAnimTime"
        android:valueTo="2dp"
        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="0"
        android:valueType="floatType"/>
    </set>
  </item>
</selector>
  

要将自定义视图状态动画附加到视图,请使用XML资源文件中的selector元素定义动画师,如本例所示,并使用android:stateListAnimator属性将其指定给视图。要将状态列表动画器分配给代码中的视图,请使用AnimationInflater.loadStateListAnimator()方法,并使用View.setStateListAnimator()方法将动画师分配给视图。

     

当您的主题扩展材质主题时,按钮默认具有Z动画。要在按钮中避免此行为,请将android:stateListAnimator属性设置为@null。

     

AnimatedStateListDrawable类允许您创建drawable,以显示关联视图的状态更改之间的动画。 Android 5.0中的某些系统小部件默认使用这些动画。以下示例显示如何将AnimatedStateListDrawable定义为XML资源:

<!-- res/drawable/myanimstatedrawable.xml -->
<animated-selector
xmlns:android="http://schemas.android.com/apk/res/android">

<!-- provide a different drawable for each state-->
<item android:id="@+id/pressed" android:drawable="@drawable/drawableP"
    android:state_pressed="true"/>
<item android:id="@+id/focused" android:drawable="@drawable/drawableF"
    android:state_focused="true"/>
<item android:id="@id/default"
    android:drawable="@drawable/drawableD"/>

<!-- specify a transition -->
<transition android:fromId="@+id/default" android:toId="@+id/pressed">
    <animation-list>
        <item android:duration="15" android:drawable="@drawable/dt1"/>
        <item android:duration="15" android:drawable="@drawable/dt2"/>
        ...
    </animation-list>
</transition>
...
</animated-selector>