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 最终透明度