android中的动画

1,帧动画(frame):

帧动画类似于电影播放的过程.根据帧动画 的原理,我们在res/drawable放置若干动画,然后在res/drawable中放入帧动画的配文件

下面来看一个例子:

 rocket_thrust.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/tebu"
android:duration="200"/>
<item
android:drawable="@drawable/tebu2"
android:duration="200"/>
<item
android:drawable="@drawable/tebu3"
android:duration="200"/>
</animation-list>

activity文件

public class AnimActivity extends Activity {
AnimationDrawable rocketAnimation;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}

public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
rocketAnimation.start();
return true;
}
return super.onTouchEvent(event);
}
}

运行即可.

从上面可以看出:

帧动画必须要以animation-list标签作为根节点,

如果android:oneshot属性值为true,表示动画只播放一次,反之则循环播放

每一个item表示一个静态图像,通过android:drawable属性指定

android:duration属性指定当前图像停留的时间,

 

2补间动画(tween)

补间动画类似于flash动画,通过定义动画的起点重点的状态以及动画 的规则,系统会自动生成中间的状态.不见动画资源需要一个<set>标签作为根节点

在<set>标签中可以包含如下4中动画,

<scale>比例缩放动画

<rotate>旋转动画

<translate>移动动画

<alpha>透明度变化

下面来看一个例子:

 hyperspace_jump.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >

<scale
android:duration="700"
android:fillAfter="false"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.4"
android:toYScale="0.6" />

<set android:interpolator="@android:anim/decelerate_interpolator" >

<scale
android:duration="400"
android:fillBefore="false"
android:fromXScale="1.4"
android:fromYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:toXScale="0.0"
android:toYScale="0.0" />

<rotate
android:duration="400"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:toDegrees="-45"
android:toYScale="0.0" />
</set>

</set>

 

public class TweenActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
}
}

这些动画都是很简单的,最主要的是要明白配置文件中属性代表的含义:

<set>标签:

  android:interpolator:动画渲染器,本例中该属性的值是@android:anim/accelerate_interpolator动画以加速方式运行,该属性值还可以为其他的值@android:anim/decelerate_interpolator(以减速方式运行),@android:anim/accelerate_decelerate_interpolator先加速后减速运行

  android:shareInterpolator:如果该属为true,表示所有的<set>标签里的动画都是用android:interpolator属性指定的渲染器,如果为false表示每个动画都以自己的渲染器.

  android:startOffset动画等待的时间,单位是毫秒

 

<scale>标签

  android:interpolator 和上面的一样

  android:fromXScale 动画沿X轴方向缩放的初始值,1.0表示原图大小(不缩放)

  android:toXScale 动画沿X轴方向缩放的最终值,1.4表示放大到原图的140%(不缩放) 

  android:fromYScale 动画沿Y轴方向缩放的初始值,1.0表示原图大小(不缩放)

  android:toYScale 动画沿Y轴方向缩放的最终值,0.4表示放大到原图的60%

  android:pivotX 表示沿X轴方向缩放的支点位置,如果属性值为50%,表示支点在沿X轴的图像中心位置,

  android:pivotY 表示沿Y轴方向缩放的支点位置,如果属性值为50%,表示支点在沿Y轴的图像中心位置,

  android:duration 动画完成时间,单位是毫秒.

 

<rotate>属性

  android:fromDegrees 表示旋转的起始位置

  android:toDegrees 表示旋转的结束位置

  android:repeatCount 表示旋转的次数,默认是0,该属性值需要设置一个整数值,如果为0表示不会重复显示动画,如果属性值大于0,动画会显示该属性指定的次数,如果为2表示该动画会顺时针旋转2周,如果想不见动画永不停止,可以把值设置成-1或者infinite.

  android:startMode 设置重复的模式,默认值是restart,该属性只有当android:repeatCount 设置成大于0的书或者infinite才起作用,该属性值还可以设置成reverse,表示偶数次显示动画会做与动画文件设置的方向相反的动作,如果想用java代码来设置该属性,可以使用Animation.setRepeatMode方法,该方法直接输一个int类型的参数.

 

<translate>

  android:fromXDelta 动画起止位置的横坐标

  android:toXDelta 动画结束位置的横坐标

  android:fromYDelta 动画起止位置的纵坐标

  android:toYDelta 动画结束位置的纵坐标

 

<alpha>

  android:fromAlpha 起始透明度

  android:toAlpha 最终透明度

posted @ 2012-02-06 18:04  johnny901114  阅读(597)  评论(0编辑  收藏  举报