App Resources.Resource Types.Animation Resources
动画资源文件可以定义以下两种动画之一:
示例:
属性动画(Property Animation):
通过修改某对象的属性值,然后用Animator设定一下这个变化的过度时间,这样来创造的一个动画(就是属性动画)。
视图动画(View Animation):
通过视图动画框架你可以实现下面两种动画:
补间动画(Tween Animation):通过Animation,对一个图像执行一系列的变换操作,就可以创造一个补间动画。
帧动画(Frame Animation):把一堆图像通过AnimationDrawable挨个显示一遍就是帧动画。
属性动画:
属性动画是一个在xml文件中定义的,在一定的时间内改变某对象的属性,比如改变背景,改变透明度,的动画。
文件位置:
res/animator/filename.xml
文件名字会作为资源ID被用到。
编译的资源类型:
指向ValueAnimator,ObjectAnimator,或AnimatorSet的引用。
资源引用:
Java代码中,R.animator.filename
XML中,@[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>
xml文件的根节点必须为<set>,<objectAnimator>,<valueAnimator>三者之一,<set>节点下可以继续嵌套其他类型节点(各种animator),包括<set>自己。
元素:
<set>
一个包含着其他动画元素(即<objectAnimator>, <valueAnimator>, or other <set>)的容器。这个元素代表了一个AnimatorSet对象。
在<set>下面可以继续嵌套<set>,每个set拥有自己的各种animator,以及自己的ordering属性。
属性:
android:ordering
值类型:Keywod。规定了这个set下的动画播放的顺序。
| Value | Description |
|---|---|
sequentially | 所有动画依次顺序播放 |
together (default) | 所有动画同时播放 |
<objectAnimator>
针对某个对象的某一属性,在一段时间内对其进行持续的改变。代表了一个ObjectAnimator对象。
属性:
android:propertyName
值类型:String。代表了要持续改动的属性名。比如你可以改动一个View对象的"alpha"属性或者"backgroundColor"属性。但是,objectAnimator是不能在xml声明中直接指定你的目标对象的,也就是说刚才的例子里你只能在xml中指定要改动的属性,却不能指定那个View对象,须通过loadAnimator()然后setTarget()才可以指定你的目标对象。
android:valueTo
值类型:int,float,color。必选项。你要改动的属性最终的目标值。color类型即类似“#FF0033”这样的十六进制数。
android:valueFrom
值类型:int,float,color。要改动的属性的起始值。如果不设的话,系统会自动从该属性的get方法获取起始值。color属性上面解释过了。
android:duration
值类型:int。动画的持续时间。默认300ms。
android:startOffset
值类型:int。调用动画的start()方法后,推迟多少毫秒再开启动画。
android:repeatCount
值类型:int。设定动画重复次数。设为"-1"表示无限循环,设为正数则按数字来重复。比如,设为"1"表示动画启动并完成一次后再重复1次,即一共播放两次。所以默认值是0,也就是只播放一次。
android:repeatMode
值类型:int(?我觉得应该是关键字,文档写的是int)。设定动画播放完成后怎么搞。这个属性想要生效,则repeatCount必须为-1或者正数,也就是不能为0。设为“reverse”表示每次播放之后从终点倒着播放到起点。设为“repeat”则表示每次都从起点开始重复播放。看看这值“reverse”“repeat”和int有什么关系。。。
android:valueType
值类型:关键字。如果你要改动的属性值是color类型的话就别设定这个属性了。android的动画framework会帮你搞定的。
| Value | Description |
|---|---|
intType | 要改动的属性值是int类型 |
floatType (default) | 要改动的属性值是float类型 |
<animator>
在一定的持续时间内播放动画。代表一个ValueAnimator对象。
属性:
android:valueTo
值类型:float,int,color。必选项。动画的终点值。color上面介绍过了。。
android:valueFrom
值类型:float,int,color。必选项。动画的结束值。color....这文档真啰嗦
android:duration
值类型:int。动画持续时间,默认300ms。
android:startOffset
值类型:int。调用动画的start()方法后,推迟多少毫秒再开启动画。
android:repeatCount
值类型:int。设定动画重复次数。设为"-1"表示无限循环,设为正数则按数字来重复。比如,设为"1"表示动画启动并完成一次后再重复1次,即一共播放两次。所以默认值是0,也就是一共只播放一次。
android:repeatMode
值类型:int(?我觉得应该是关键字,文档写的是int)。设定动画播放完成后怎么搞。这个属性想要生效,则repeatCount必须为-1或者正数,也就是不能为0。设为“reverse”表示每次播放完成之后从终点倒着播放到起点。设为“repeat”则表示每次都从起点开始重复播放。看看这值“reverse”“repeat”和int有什么关系。。。
android:valueType
值类型:关键字。如果值是color类型的话就别设定这个属性了。android的动画framework会帮你搞定的。
| Value | Description |
|---|---|
intType | 要改动的属性值是int类型 |
floatType (default) | 要改动的属性值是float类型 |
本示例存放在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>
想要运行这个动画,你必须用一个AnimatorSet对象来把这个xml文件填充进去,然后在播放动画之前设定一个目标对象。直接调setTarget()就可以给这一组动画设定一个单独的目标对象。来,给你秀一下:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
set.setTarget(myObject);
set.start();
视图动画:
视图动画框架支持补间动画(Tween Animation),和帧动画。两种动画都可以在xml中声明。接下来就来看看怎么用。
补间动画:
在xml文件中定义一种对图像进行旋转,渐隐,移动,拉伸等类似的转变就是补间动画。
文件位置:
res/anim/filename.xml
文件名会作为资源ID被用到。
编译的资源类型(也就是对应的java类):
Animation。
资源引用:
Java代码中:R.anim.filename
XML中:@[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>
xml文件必须有单一的根节点:<alpha>
<scale><translate><rotate><set>之一。<set>元素可以包含其他的元素,包括<set>自身。
元素:
<set>
一个可容纳其他动画元素的容器。对应类AnimationSet。
属性:
android:interpolator
值类型:Interpolator资源。此属性代表了给动画设定的一个Interpolator(插值器?不太好翻就原文吧)。属性值必须为对某个资源的引用,而这个资源必须设置了interpolator的一些细节,注意这个资源可不是某个interpolator的类名。(解释的略蛋疼,等下会有例子)。有些系统自带的默认interpolator资源,你可以在其基础上创建自己的interpolator资源。在Interpolators相关章节会有详细介绍。
android:shareInterpolator
值类型:boolean。如果你想把所有的子元素都色设为该interpolator就把这个属性设为“true”
<alpha>
以透明度的变化实现渐入/渐隐的效果。代表AlphaAnimation类。
属性:
android:fromAlpha
值类型:float。起始的不透明度,0.0是全透明,1.0是不透明。
android:toAlpha
值类型:float。目标不透明度。
更多alpha属性参考reference文档中的Animation类。(Animation的属性都被alpha元素继承了) 。
<scale>
缩放动画。你可以通过pivotX和pivotY指定一个缩放的中心点,然后图像以此为中心进行缩放。比如,前面提到的那俩XY你设为0,0的话(0,0就是图像的左上角)。然后所有的缩放动画都会向着右下方进行。对应ScaleAnimation。
属性:
android:fromXScale
值类型:float。x方向起始值。1.0就是原尺寸。
android:toXScale
值类型:float。x方向目标值。1.0就是原尺寸。
android:fromYScale
值类型:float。...
android:toYScale
值类型:float。...
android:pivotX
值类型:float。目标对象进行定点缩放时定点的x坐标
android:pivotY。........................的y坐标。
更多scale属性参考reference文档中的Animation类。(Animation的属性都被scale元素继承了) 。
<translate>
移动。支持以下属性并且属性值有三种形式:以"%"结尾的-100到100的数字,表示相对于自己的位置,而以"%p"结尾的-100到100的数字,表示相对于父控件的位置,而没有后缀的纯数字则代表绝对位值。对应TranslateAnimation。
属性:
android:fromXDelta
值类型:float或percentage。起始位置的X坐标。值类型有三种形式:以像素为单位的距自己左上角的位置,如"5",或者类似"5%"这样的相对于自己宽度的比例,或者"5%p"这样的相对于父控件宽度的比例。
android:toXDelta
值类型:float或percentage。终止位置的X坐标。值类型....
android:fromYDelta
值类型:float或percentage。起始位置的Y坐标。值类型....
android:toYDelta
不写了...
更多translate属性参考reference文档中的Animation类。
<rotate>
旋转动画。对应RotateAnimation类。
属性:
android:fromDegrees
值类型:float。起始角度,单位为度。
android:toDegress
值类型:float。终止角度。
android:pivotX
值类型:float或percentage。旋转中心的x坐标。值类型有三种形式:以像素为单位的距自己左上角的位置,如"5",或者类似"5%"这样的相对于自己宽度的比例,或者"5%p"这样的相对于父控件宽度的比例。
android:pivotY
值类型:float或percentage。旋转中心的y坐标。值类型...
更多rotate属性参考reference文档中的Animation类。
示例:
文件位置: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);
Interpolators:
Interpolator就是一个定义在XML文件里的动画修改器,可以修改动画的速率变化。可以实现让你的动画逐渐加速播放或者逐渐减速的播放或者重复播放什么什么的。
Interpolator可以通过android:interpolator属性来设定到某个动画上,而属性值则是一个引用,指向某interpolator资源。
在android系统中所有可用的interpolator都是Interpolator类的子类。每一个子类你都可以引用,然后把它设定给某个动画。引用方法就是通过android:interpolator属性。下面看一下所有你可以直接引用的资源:
| Interpolator class | Resource 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 |
资源ID那一栏就是你可以给android:interpolator属性赋的属性值,左边一栏即每个值对应的类。
比如下面这样:
<set android:interpolator="@android:anim/accelerate_interpolator">
...
</set>
自定义Interpolators:
如果上表这些interpolator不能满足你,你可以自定义一个,把已有的interpolator的某属性改一改,比如你可以改变AnticipateInterpolator的加速度属性,或者CycleInterpolator的循环次数属性。修改方法就是在XML文件中创建你自己的interpolator资源。
文件位置:
res/anim/filename.xml
文件名,有用。
编译的资源类型:
对应各自的interpolator类。
引用方法:
在XML中:@[package:]anim/filename
语法:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
android:attribute_name="value"
/>
如果你在资源文件里什么属性也不写,那么你的interpolator就将保持它原有的属性不变(保持如上面那个表所示的属性)。
元素:
在XML文件中定义的interpolater呢,类名都是小写字母打头哦~:
<acclerateDeceoerateInterpolator>
动画的速率在开始和结束的时候较慢,中间的时候较快。
无属性。
<acclerateInterpolator>
动画开始比较慢,然后一路加速
属性:
android:factor
值类型:float。加速度,默认为1。
<anticipateInterpolator>
动画开始向反方向,然后向正方向弹出。
属性:
android:tension
值类型:float。弹出的弹力。默认为2。
<anticipateOvershootInterpolator>
动画开始向反方向,然后向正方向弹出直接冲过终点再返回。
属性:
android:tension
值类型:float。弹出的弹力。默认为2。
android:texratension
值类型:float。弹力倍数。默认1.5。
....
还有几个先不翻了。。
示例:
文件路径res/anim/my_overshoot_interpolator.xml
<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:tension="7.0"
/>
直接写一个类,然后修改它的属性,符合之前讲的模式。在动画中的使用方式:
<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
。。有用
编译的资源类型:
对应AnimationDrawable类。
引用方法:
在Java代码中:R.drawable.filename
在XML中:@[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>
元素:
<animation-list>
必选项。此元素必须为根节点,下面包含一个或多个<item>元素。
属性:
android:oneshot
值类型:boolean。设为"true"表示只播放一次,"false"表示循环播放。
<item>
动画的一帧。必须是<animation-list>的子元素。
属性:
android:drawable
值类型:Drawable资源。表示此帧图像所使用的drawable对象。
android:duration
值类型:int。动画持续时间,单位毫秒。
示例:
XML文件路径res/anim/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>
下面的代码把这个帧动画设为某视图的背景,然后播放动画:
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();
.....这例子感觉有点小问题,一是文件名对不上,然后是明明说要存放在drawable目录下怎么莫名其妙又存到了anim..
posted on
浙公网安备 33010602011771号