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

来源:互联网 发布:linux ext3 格式化 编辑:程序博客网 时间:2024/05/02 01:17

ViewPropertyAnimator制作动画

ViewPropertyAnimator类使用一个单一的Animator对象,给一个View对象的几个动画属性平行处理提供一种简单的方法。它的行为非常像ObjectAnimator类,因为它修改了View对象属性的实际的值,但是当多个动画属性同时处理时,它会更加高效。另外,使用ViewPropertyAnimator类的代码更加简洁和易于阅读。以下代码片段显示了在同时处理View对象的xy属性动画效果时,使用多个ObjectAnimator对象、一个单独的ObjectAnimator对象和ViewPropertyAnimator对象之间的差异:

过个ObjectAnimator对象:

ObjectAnimator animX = ObjectAnimator.ofFloat(myView, "x", 50f);

ObjectAnimator animY = ObjectAnimator.ofFloat(myView, "y", 100f);

AnimatorSet animSetXY = new AnimatorSet();

animSetXY.playTogether(animX, animY);

animSetXY.start();

一个ObjectAnimator对象:

PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);

PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);

ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();

ViewPropertyAnimator对象:

myView.animate().x(50f).y(100f);

 

XML中声明动画

属性动画系统会让你用XML来声明属性动画,而不是用编程的方式来做它。通过XML中定义你的动画,能够更加容易的在多个Activity中重用动画,并且更加容易的编辑动画的播放顺序。

Android3.1开始,要把使用新的属性动画的API的动画文件与那些使用传统的视图动画框架区分开,你应该把属性动画的XML文件保存在res/animator/目录中(而不是res/anim/)。animator目录名是可选的,但是如果想要使用Eclipse ADT插件(ADT11.0.0+)中的布局编辑器,就必须使用animator目录,因为ADT只搜索res/animator目录中属性动画资源。

以下是属性动画类在XML声明中所使用的对应的XML标签:

· ValueAnimator - <animator>

· ObjectAnimator - <objectAnimator>

· AnimatorSet - <set>

以下示例顺序的播放两组对象动画,第一组动画中嵌套了一个同时播放两个对象的动画:

<set android:ordering="sequentially">

   <set>

       <objectAnimator

           android:propertyName="x"

           android:duration="500"

           android:valueTo="400"

           android:valueType="intType"/>

       <objectAnimator

           android:propertyName="y"

           android:duration="500"

           android:valueTo="300"

           android:valueType="intType"/>

   </set>

   <objectAnimator

       android:propertyName="alpha"

       android:duration="500"

       android:valueTo="1f"/>

</set>

为了运行这个动画,在代码中,必须把这个XML资源填充到一个AnimatorSet对象中,并且在开始播放这个动画集之前,要把这个动画集合设置给目标对象。调用setTarget()方法就可以方便的把AnimatorSet对象中的所有子对象设置给一个单一的目标对象。以下代码显示了做这件事的方法:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,R.anim.property_animator);

set.setTarget(myObject);

set.start();

有关定义属性动画的XML语法信息,请看“动画资源”。

http://developer.android.com/guide/topics/resources/animation-resource.html#Property

 

原创粉丝点击