Android属性动画---Property Animation(六)

来源:互联网 发布:mac apache php7配置 编辑:程序博客网 时间:2024/04/18 22:43

对于ViewGroups对象布局变化的动画

属性动画系统给ViewGroup对象的动画变化提供了与View对象一样容易动画处理方法。

使用LayoutTransition类在ViewGroup内部处理布局变化的动画。当调用一个View对象的setVisibility()方法,或者设置该ViewGONE常量,或者把该View对象添加到ViewGroup(或者从ViewGroup中删除)时,在ViewGroup内部的View对象就能够实现时隐时现的动画效果。当在ViewGroup对象中添加或删除View对象时,其中的其他View对象也能够动画移动到新的位置。在LayoutTransition对象内通过调用setAnimator()方法,并且在传递给该方法的Animator对象参数中带有下列LayoutTransition常量之一,就能够定义该常量所代表的动画:

1.  APPEARING---一个标记,它指示要在容器中正在显示的项目上运行动画;

2.  CHANGE APPEARING---一个标记,它指示在容器中由于新项目的出现而导致其他项目变化所要运行的动画;

3.  DISAPPEARING---一个标记,它指示一个从容器中消失的项目所要运行的动画;

4.  CHANGE_DISAPPEARING---一个标记,它指示由于一个项目要从容器中消失而导致其他项目的变化,所要运行的动画。

能够给这四种事件类型定义自定义动画,以便定制自己的布局过渡效果,也可以告诉动画系统只使用默认的动画效果。

APIDemo中的LayoutAnimations示例,显示了如何给布局的过渡定义动画效果,并且在想要动画效果的View对象上设置动画。

LayoutAnimationsByDefault类以及它对应的layout_animations_by_default.xml布局资源文件显示了如何在XML中启用ViewGroup对象的默认布局过渡效果。需要做的事情仅仅是把ViewGroup元素的android.animateLayoutchanges属性设置为true。例如:

<LinearLayout

   android:orientation="vertical"

   android:layout_width="wrap_content"

   android:layout_height="match_parent"

   android:id="@+id/verticalContainer"

android:animateLayoutChanges="true" />

如果把这个属性设置为true,那么在该ViewGroup对象中添加或删除View对象,以及ViewGroup对象中其他的View对象都会自动的具有动画效果。

使用TypeEvaluator

如果想要的动画类型是Android系统所未知的,那么通过实现TypeEvaluator接口就能够创建自己的评价器。Android系统已知的类型是intfloat或颜色(color),分别有IntEvaluatorFloatEvaluatorArgbEvaluator类型的评价器所支持。

TypeEvaluator接口中只有一个要实现的方法:evaluate()方法。这个方法允许正在使用的动画处理器返回一个适用于于当前动画时点动画属性值,FloatEvaluator类演示了这个方法是如何做这件事的:

public class FloatEvaluator implements TypeEvaluator {

    public Object evaluate(float fraction, Object startValue, Object endValue) {

       float startFloat = ((Number) startValue).floatValue();

       return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);

   }

}

注意:当ValueAnimator对象(或ObjectAnimator对象)运行时,它会计算当前的动画播放比例(一个0到1之间的值),然后根据你所使用的插值类型来计算一个要插入的动画的版本。插值比例是由TypeEvaluator对象通过fraction参数接收来的,因此在计算动画值的时候,不需要考虑插值。

 

原创粉丝点击