您的位置:首页 > 移动开发 > Android开发

Android Animation学习总结

2011-01-09 18:17 411 查看
在Android中定义了2类animation

1.Tween Animation(补间动画)

通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画

2.Frame Animation(帧动画)

顺序播放事先做好的图像,是一种画面转换动画,好比放电影。

以下具体介绍这两类动画

Tween Animation

在XML中定义具体的动画 位置为:res/anim/fileName.xml(具体文件名)。

实际的文件名将被当做resource ID 在java代码 或者其他XML中被引用。

在XML中基本语法:

<?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:fromX="float"
android:toX="float"
android:fromY="float"
android:toY="float" />
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float" />
<set>
...
</set>
</set>


这个文件必须包含一个根元素,可以是<alpha><scale> <translate> <rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。

<set>

一个容器 可以包含 (
<alpha>
,
<scale>
,
<translate>
,
<rotate>
) or other
<set>
元素。 在set中设置的属性 (for example, duration or fillBefore), 将覆盖它所包含的类型的设置的同一属性。

属性:

android:interpolator


interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果可以 accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等。

android 自带的interpolator



AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速

AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速

AnticipateInterpolator 开始的时候向后然后向前甩

AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值

BounceInterpolator 动画结束的时候弹起

CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线

DecelerateInterpolator 在动画开始的地方快然后慢

LinearInterpolator 以常量速率改变

OvershootInterpolator 向前甩一定值后再回到原来位置

如果android定义的interpolators不符合你的效果也可以自定义interpolators

例子:

XML file saved at
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"
/>

android:shareInterpolator
Boolean. "true" if you want to share the same interpolator among all child elements




<alpha> 淡入淡出动画效果

例子:

<alpha android:fromAlpha="1.0" //Float表示 起始透明度 0.0 透明 1.0 不透明

android:toAlpha="0" //Float表示 结束透明度 0.0 透明 1.0 不透明
android:duration="@android:integer/config_mediumAnimTime"//动画持续时间

/>



<scale> 渐变尺寸伸缩动画效果

例子:

<scale android:fromXScale="1.0" android:toXScale=".5" //动画开始和结束时x坐标上的伸缩尺寸 0.0 表示不伸缩 1.1 表示正常无变化
android:fromYScale="1.0" android:toYScale=".5" //动画开始和结束时y坐标上的伸缩尺寸 0.0 表示不伸缩 1.1 表示正常无变化

android:pivotX="50%p" android:pivotY="50%p" //动画相对于物件的x,y坐标开始位置 取值0%-100%. 50%
android:duration="@android:integer/config_mediumAnimTime" />

<translate> 水平和/或垂直运动
三种表示格式:
1.-100% 到 100% 相对自身的百分比
2.-100%P到100%P 相对父组件的百分比
3.folat value 没有后缀 表示绝对值

例子:


<translate android:fromYDelta="-100%" android:toXDelta="0" android:duration="100" />


<rotate> 旋转动画
<rotate
android:fromDegrees="0" //动画起始角度 负数表示逆时针 正式表示顺时针
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />

在应用程序中应用动画

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
findViewById(R.id.pw).startAnimation(shake);


Frame Animation

语法:

<?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 "true" if you want to perform the animation once; "false" to loop the animation



<item> 单独的帧动画

属性:

android:drawable


Drawable resource. The drawable to use for this frame.

android:duration


Integer. The duration to show this frame, in milliseconds.

在应用程序中应用

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: