西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网

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

时间:2016-03-30 22:29来源:未知 作者:好模板 点击:
属性动画系统允许动画View对象并提供很多比view动画系统更高级的功能。view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,因为View本身没有要操控的属性。

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

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

  • translationX 和 translationY : 这两个属性控制 View 的位置,它们是 View 被 layout容器所设置的坐标位置的增量。

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

  • scaleX 和 scaleY : 这些属性控制 View 的 2D 缩放。

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

  • x 和 y : 这些代表了 View 在 container 中的最终位置,它是 left 和 top 与translationX 和 translationY 的和。

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

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

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

用 ViewPropertyAnimator 进行动画

ViewPropertyAnimator 提供了一个同时动画某个 View 中的多个属性的简便方法,只需使用一个 Animator 对象。它的行为很像 ObjectAnimator ,因为它修改了真正的 view 属性,但是它对于同时动画多个属性更在行。另外,使用ViewPropertyAnimator 的代码更加简洁易懂。下面的代码片段演示了当同时动画一个 View 的 x 和 y 属性时使用多个 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 中定义动画,你可以轻易的在多个 activit y 中重用你的动画,并且可以更容易的修改动画顺序。

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

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

  • ValueAnimator - <animator>

  • ObjectAnimator - <objectAnimator>

  • AnimatorSet - <set>

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

<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_animator 是 XML 文件的名字。

(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容