码迷,mamicode.com
首页 > 移动开发 > 详细

android动画详解六 XML中定义动画

时间:2016-03-31 07:10:57      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:

动画View



属性动画系统允许动画View对象并提供很多比view动画系统更高级的功能。view动画系统通过改变绘制方式来变换View对象,view动画是被view容器所处理的,因为View本身没有要操控的属性。结果就是View被动画了,但View对象本身并没有变化。在Android3.0中,新的属性和相应的gettersetter方法被加入以克服此缺点。

属性动画系统可以通过改变View对象的真实属性来动画Views。而且,View也会在其属性改变时自动调用invalidate()方法来刷新屏幕。View类中的能促进属性动画能力的的新属性有:

  • translationXtranslationY:这两个属性控制View的位置,它们是Viewlayout容器所设置的坐标位置的增量。

  • rotation,rotationX,rotationY:这些属性控制着在在2D(rotation属性)3D上的旋转。

  • scaleXscaleY:这些属性控制View2D缩放。

  • pivotXpivotY:这些属性控制着中心点的位置,旋转和缩放变化对是围绕它进行的。默认下,中心点在对象的中心位置。

  • xy:这些代表了Viewcontainer中的最终位置,它是lefttoptranslationXtranslationY的和。

  • alpha:代表了View的透明度。1(不透明)是默认值,0表示完全透明(看不见了)

要动画一个View对象的属性,比如它的颜色或旋转值,你所有需要做的就是创建一个属性animator 然后指定你想动画的View属性。例如:

ObjectAnimator.ofFloat(myView,"rotation", 0f, 360f);

ViewPropertyAnimator进行动画

ViewPropertyAnimator提供了一个同时动画某个View中的多个属性的简便方法,只需使用一个Animator对象。它的行为很像ObjectAnimator,因为它修改了真正的view属性,但是它对于同时动画多个属性更在行。另外,使用ViewPropertyAnimator的代码更加简洁易懂。下面的代码片段演示了当同时动画一个Viewxy属性时使用多个ObjectAnimator对象、单个ObjectAnimator、和ViewPropertyAnimator的不同。

多个ObjectAnimator 对象

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

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

AnimatorSetanimSetXY = new AnimatorSet();

animSetXY.playTogether(animX,animY);

animSetXY.start();

一个ObjectAnimator

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

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

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

ViewPropertyAnimator

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

XML中声明动画



属性动画系统使你能够使用XML声明属性动画而不用写代码。通过在XML中定义动画,你可以轻易的在多个activity中重用你的动画,并且可以更容易的修改动画顺序。

为了区分使用了新的属性动画API和使用了旧的view动画框架的文件,从Android3.1开始,你应该将属性动画XML文件保存到res/animator/文件夹下(而不是res/anim/)。使用animator时,其文件夹的名字是可选的,但是当你要使用EclipseADT plugin (ADT 11.0.0+)中的layout编辑工具时就是必须的了,因为ADT只去res/animator/文件夹下搜寻属性动画资源。

下面的属性动画类具有支持XML中声明的能力:

下面的例子顺序的播放两个objectanimation动画集合,第一个也是一个set,这个子set同时播放两个objectanimation

<setandroid: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>

要播放此动画,你必须在你的代码中inflateXML 资源成一个AnimatorSet对象,然后设置所有动画的目标对象,再开始动画。调用setTarget()为所有的子集AnimatorSet设置单个对象很简单。下面的代码演示了如何做:

AnimatorSetset = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,

R.anim.property_animator);

set.setTarget(myObject);

set.start();

property_animatorXML文件的名字。





android动画详解六 XML中定义动画

标签:

原文地址:http://blog.csdn.net/niu_gao/article/details/51018882

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!