Android应用开发(11)---动画资源

动画资源

动画资源可以定义两种动画类型之一:

属性动画
通过在一段时间内用一个对象的属性值修改来创建一个动画 Animator
查看动画

视图动画框架可以使用两种类型的动画:

属性动画

在XML中定义的动画,可在一段时间内修改目标对象的属性,如背景颜色或Alpha值。

文件位置:
res/animator/filename.xml
文件名将被用作资源ID。
编译资源数据类型:
资源指针 ValueAnimator ObjectAnimator AnimatorSet
资源参考:
在Java中: 在XML中: R.animator.filename
@[package:]animator/filename
句法:
 
    
< set   android:ordering = ["together" | "sequentially" ] >     < objectAnimator         android:propertyName = " string "         android:duration = " int "         android:valueFrom = " float | int | color "         android:valueTo = " float | int | color "         android:startOffset = " int "         android:repeatCount = " int "         android:repeatMode = ["repeat" | "reverse" ]        android:valueType = ["intType" | "floatType" ] />     < animator         android:duration = " int "         android:valueFrom = " float | int | color "         android:valueTo = " float | int | color "         android:startOffset = " int "         android:repeatCount = " int "         android:repeatMode = ["repeat" | "reverse" ]        android:valueType = ["intType" | "floatType" ] />     < set >         ...    </set> </set>

该文件必须具有一个根元素:要么 <set><objectAnimator><valueAnimator>您可以将<set>元素中的动画元素分组在一起,包括其他 <set>元素。

内容:
<set>
保持其他动画元素(A容器 <objectAnimator> ,  <valueAnimator> 或其它 <set> 元件)。代表一个 AnimatorSet

您可以指定嵌套<set>标签以进一步将动画组合在一起。每个都<set>可以定义自己的 ordering属性。

属性:

android:ordering
关键字 指定此集合中动画的播放顺序。
描述
sequentially 按顺序播放此组中的动画
together (默认) 同时在该组中播放动画。
<objectAnimator>
在特定的时间内动画化对象的特定属性。代表一个 ObjectAnimator

属性:

android:propertyName
字符串 必需 该对象的属性用动画名称引用。例如,您可以指定  "alpha" "backgroundColor" 为View对象。 但是, objectAnimator 元素不公开 target 属性,因此您无法在XML声明中将该对象设置为动画。您必须通过调用 loadAnimator() 和调用 setTarget() 来设置包含此属性的目标对象来充气动画XML资源
android:valueTo
float,int或color 必需 动画属性结束的值。颜色表示为六位十六进制数字(例如,#333333)。
android:valueFrom
float,int或color 动画属性开始的值。如果未指定,则动画从该属性的get方法获得的值开始。颜色表示为六位十六进制数字(例如,#333333)。
android:duration
int 动画的时间(以毫秒为单位)。300毫秒是默认值。
android:startOffset
int start() 调用动画后延迟的毫秒量 
android:repeatCount
int 多少次重复动画。设置为 "-1" 无限重复或正整数。例如,一个值 "1" 意味着动画在初始运行动画后重复一次,因此动画总共播放两次。默认值是 "0" ,这意味着不重复。
android:repeatMode
int 当动画到达动画结尾时动画的行为如何。 android:repeatCount  必须设置为正整数或 "-1" 该属性才能起作用。设置为 "reverse"  每次迭代都使动画反向,或者每次 "repeat" 从头开始动画循环。
android:valueType
关键字 如果值是一种颜色,则不要指定该属性。动画框架自动处理颜色值
描述
intType 指定动画值是整数
floatType (默认) 指定动画值是浮动
<animator>
在指定的时间内执行动画。代表一个 ValueAnimator

属性:

android:valueTo
float,int或color 必需 动画结束的值。颜色表示为六位十六进制数字(例如,#333333)。
android:valueFrom
float,int或color 必需 动画开始的位置。颜色表示为六位十六进制数字(例如,#333333)。
android:duration
int 动画的时间(以毫秒为单位)。300ms是默认值。
android:startOffset
int start() 调用动画后延迟的毫秒量 
android:repeatCount
int 多少次重复动画。设置为 "-1" 无限重复或正整数。例如,一个值 "1" 意味着动画在初始运行动画后重复一次,因此动画总共播放两次。默认值是 "0" ,这意味着不重复。
android:repeatMode
int 当动画到达动画结尾时动画的行为如何。 android:repeatCount  必须设置为正整数或 "-1" 该属性才能起作用。设置为 "reverse"  每次迭代都使动画反向,或者每次 "repeat" 从头开始动画循环。
android:valueType
关键字 如果值是一种颜色,则不要指定该属性。动画框架自动处理颜色值。
描述
intType 指定动画值是整数
floatType (默认) 指定动画值是浮动

例:
XML文件保存在 res/animator/property_animator.xml
 
  
<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>

I为了运行此动画,您必须将代码中的XML资源充满到AnimatorSet对象中,然后在开始动画设置之前为所有动画设置目标对象。为方便起见,调用setTarget()为所有孩子设置了一个目标对象AnimatorSet以下代码显示了如何执行此操作:

 
  
AnimatorSet set = ( AnimatorSet ) AnimatorInflater . loadAnimator ( myContext ,     R . animator . property_animator ); set . setTarget ( myObject ); set . start ();
也可以看看:

查看动画

视图动画框架支持补间和逐帧动画,它们都可以用XML声明。以下各节介绍如何使用这两种方法。

吐温动画

用XML定义的动画,用于执行图形上的旋转,淡入淡出,移动和拉伸等过渡。

文件位置:
res/anim/filename.xml 文件名将被用作资源ID。
编译资源数据类型:
资源指针指向 Animation
资源参考:
在Java中: 在XML中: R.anim.filename @[package:]anim/filename
句法:
 
    
<? xml version = "1.0" encoding = "utf-8" ?>
< set xmlns:android = "http://schemas.android.com/apk/res/android"
   
android:interpolator = "@[package:]anim/ interpolator_resource "
   
android:shareInterpolator = ["true" | "false" ] >
   
< alpha
       
android:fromAlpha = " float "
       
android:toAlpha = " float " />
   
< scale
       
android:fromXScale = " float "
       
android:toXScale = " float "
       
android:fromYScale = " float "
       
android:toYScale = " float "
       
android:pivotX = " float "
       
android:pivotY = " float " />
   
< translate
       
android:fromXDelta = " float "
       
android:toXDelta = " float "
       
android:fromYDelta = " float "
       
android:toYDelta = " float " />
   
< rotate
       
android:fromDegrees = " float "
       
android:toDegrees = " float "
       
android:pivotX = " float "
       
android:pivotY = " float " />
   
< set >
        ...
   
</set>
</set>

该文件必须具有一个根元素:任一种 <alpha><scale><translate>, <rotate>,或<set>保持其它动画元素(甚至嵌套的一组(或组)元件<set>的元件)。

内容:
<set>
保持其他动画元素(A容器 <alpha> <scale> <translate> ,  <rotate> )或其它 <set> 元件。代表一个 AnimationSet

属性:

android:interpolator
内插资源 一个 Interpolator 应用于动画。该值必须是对指定插补器(不是插补器类名称)的资源的引用。您可以从平台获得默认的插补器资源,或者您可以创建自己的插补器资源。有关内 插器的 更多信息,请参阅下面的讨论
android:shareInterpolator
布尔值 如果要在所有子元素之间共享相同的插补器,则为“true”。
<alpha>
淡入或淡出动画。代表一个 AlphaAnimation

属性:

android:fromAlpha
浮动 开始不透明度偏移量,其中0.0是透明的,1.0是不透明的。
android:toAlpha
浮动 结束不透明度偏移量,其中0.0是透明的,1.0是不透明的。

有关支持的更多属性<alpha>,请参阅 Animation类引用(其中,所有XML属性均由此元素继承)。

<scale>
调整大小的动画。您可以通过指定 pivotX 指定从其向外(或向内)增长的图像的中心点 pivotY 例如,如果这些值为0,0(左上角),则所有增长都将下降并且向右。代表一个 ScaleAnimation

属性:

android:fromXScale
浮动 启动X大小偏移量,其中1.0不变。
android:toXScale
浮动 结束X大小偏移量,其中1.0不变。
android:fromYScale
浮动 开始Y尺寸偏移,其中1.0不变。
android:toYScale
浮动 结束Y大小偏移量,其中1.0不变。
android:pivotX
浮动 对象缩放时X坐标保持固定。
android:pivotY
浮动 当对象缩放时,Y坐标保持固定。

有关支持的更多属性<scale>,请参阅 Animation类引用(其中,所有XML属性均由此元素继承)。

<translate>
垂直和/或水平运动。支持以下三种格式中的任何一种:从-100到100的值以“%”结尾,表示相对于其自身的百分比; 从-100到100的值以“%p”结尾,表示相对于其父项的百分比; 没有后缀的浮点值,表示绝对值。代表一个 TranslateAnimation

属性:

android:fromXDelta
浮动或百分比 开始X偏移。表示:以像素为单位相对于正常位置(例如 "5" ),以相对于元素宽度的百分比(例如  "5%" )或相对于父宽度的百分比(例如 "5%p" )表示。
android:toXDelta
浮动或百分比 结束X偏移量。表示:以像素为单位相对于正常位置(例如 "5" ),以相对于元素宽度的百分比(例如  "5%" )或相对于父宽度的百分比(例如 "5%p" )表示。
android:fromYDelta
浮动或百分比 开始Y偏移。表示:以像素为单位,相对于正常位置(例如 "5" ),相对于单元高度的百分比(例如  "5%" ),或相对于父高度的百分比(例如 "5%p" )。
android:toYDelta
浮动或百分比 结束Y偏移。表示:以像素为单位,相对于正常位置(例如 "5" ),相对于单元高度的百分比(例如  "5%" ),或相对于父高度的百分比(例如 "5%p" )。

有关支持的更多属性<translate>,请参阅 Animation类引用(其中,所有XML属性均由此元素继承)。

<rotate>
一个旋转动画。代表一个 RotateAnimation

属性:

android:fromDegrees
浮动 以度数开始角度位置。
android:toDegrees
浮动 结束角度位置,以度为单位。
android:pivotX
浮动或百分比 旋转中心的X坐标。表示:以像素为单位,相对于对象的左边缘(例如 "5" ),相对于对象左边缘的 "5%" 百分比(例如),或相对于父容器的左边缘(例如 "5%p" )的百分比
android:pivotY
浮动或百分比 旋转中心的Y坐标。表示:以像素为单位相对于对象的顶部边缘(例如 "5" ),以相对于对象的顶部边缘(例如 "5%" )的百分比或相对于父容器的顶部边缘(例如 "5%p" )的百分比表示

有关支持的更多属性<rotate>,请参阅 Animation类引用(其中,所有XML属性均由此元素继承)。

例:
XML文件保存在 res/anim/hyperspace_jump.xml

 
    
<set xmlns:android = "http://schemas.android.com/apk/res/android"     android:shareInterpolator = "false" >     <scale         android:interpolator = "@android:anim/accelerate_decelerate_interpolator"         android:fromXScale = "1.0"         android:toXScale = "1.4"         android:fromYScale = "1.0"         android:toYScale = "0.6"         android:pivotX = "50%"         android:pivotY = "50%"         android:fillAfter = "false"         android:duration = "700" />     <set         android:interpolator = "@android:anim/accelerate_interpolator"         android:startOffset = "700" >         <scale             android:fromXScale = "1.4"             android:toXScale = "0.0"             android:fromYScale = "0.6"             android:toYScale = "0.0"             android:pivotX = "50%"             android:pivotY = "50%"             android:duration = "400" />         <rotate             android:fromDegrees = "0"             android:toDegrees = "-45"             android:toYScale = "0.0"             android:pivotX = "50%"             android:pivotY = "50%"             android:duration = "400" />     </set> </set>

这个应用程序代码将动画应用到一个ImageView并开始动画:

 
    
ImageView image = ( ImageView ) findViewById ( R . id . image );
Animation hyperspaceJump = AnimationUtils . loadAnimation ( this , R . anim . hyperspace_jump );
image
. startAnimation ( hyperspaceJump );
see also:

插值

插值器是一种用XML定义的动画修改器,它影响动画中的变化率。这可以让您现有的动画效果加速,减速,重复,反弹等。

插值器应用于具有android:interpolator 属性的动画元素,该属性的值是对插补器资源的引用。

Android中可用的所有插补器都是Interpolator该类的类。对于每个插值器类,Android包含一个公共资源,您可以引用它以便使用该android:interpolator属性将插补器应用于动画下表指定了用于每个插补器的资源:

插值器类 资源ID
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

以下是如何使用android:interpolator属性应用其中之一的方法

 
  
<set android:interpolator = “@ android:anim / accelerate_interpolator” >     ... </ set>

定制插入器

如果您对平台提供的插补器(上表中列出)不满意,则可以创建具有修改属性的自定义插补器资源。例如,您可以调整加速度AnticipateInterpolator,或调整加速度的周期数CycleInterpolator为此,您需要在XML文件中创建自己的插补器资源。

文件位置:
res/anim/filename.xml 文件名将被用作资源ID。
编译资源数据类型:
指向相应插补器对象的资源指针。
资源参考:
在XML中:  @[package:]anim/filename
句法:

 
    
<scale xmlns:android = "http://schemas.android.com/apk/res/android"
   
android:interpolator = "@anim/my_overshoot_interpolator"
   
android:fromXScale = "1.0"
   
android:toXScale = "3.0"
   
android:fromYScale = "1.0"
   
android:toYScale = "3.0"
   
android:pivotX = "50%"
   
android:pivotY = "50%"
   
android:duration = "700" />

框架动画

XML中定义的动画,按顺序显示一系列图像(如电影)。

文件位置:
res/drawable/filename.xml
文件名将被用作资源ID。
编译资源数据类型:
资源指针指向 AnimationDrawable
资源参考:
在Java中: 在XML中: R.drawable.filename
@[package:]drawable.filename
句法:
 
    
<? xml version = "1.0" encoding = "utf-8" ?> < animation-list xmlns:android = "http://schemas.android.com/apk/res/android"     android:oneshot = ["true" | "false" ] >     < item         android:drawable = "@[package:]drawable/ drawable_resource_name "         android:duration = " integer " /> </animation-list>
elements:
<animation-list>
Required. This must be the root element. Contains one or more  <item> elements.

attributes:

android:oneshot
Boolean. "true" if you want to perform the animation once; "false" to loop the animation.
<item>
A single frame of animation. Must be a child of a  <animation-list> element.

attributes:

android:drawable
Drawable resource. The drawable to use for this frame.
android:duration
Integer. The duration to show this frame, in milliseconds.
example:
XML file saved at  res/drawable/rocket.xml:
 
      
<? xml version = "1.0" encoding = "utf-8" ?>
<animation-list xmlns:android = "http://schemas.android.com/apk/res/android"
   
android:oneshot = "false" >
   
<item android:drawable = "@drawable/rocket_thrust1" android:duration = "200" />
   
<item android:drawable = "@drawable/rocket_thrust2" android:duration = "200" />
   
<item android:drawable = "@drawable/rocket_thrust3" android:duration = "200" />
</animation-list>
This application code will set the animation as the background for a View, then play the animation:
 
      
ImageView rocketImage = ( ImageView ) findViewById ( R . id . rocket_image );
rocketImage
. setBackgroundResource ( R . drawable . rocket_thrust );

rocketAnimation
= ( AnimationDrawable ) rocketImage . getBackground() ;
rocketAnimation
. start() ;
see also:

猜你喜欢

转载自blog.csdn.net/zhangbijun1230/article/details/80634867