帧动画
帧动画 类似 照相机,就是播放一系列的图片资源
帧动画使用步骤:
1. 将一系列图片复制到res/drawable中
2.在res/drawable中创建一个animation-list格式的xml文件(例如名为girl),并把帧动画用到的图片加载进来
<?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/girl_1"
android:duration="200"/>
<item
android:drawable="@drawable/girl_2"
android:duration="200"/>
<item
android:drawable="@drawable/girl_3"
android:duration="200"/>
<item
android:drawable="@drawable/girl_4"
android:duration="200"/>
<item
android:drawable="@drawable/girl_5"
android:duration="200"/>
<item
android:drawable="@drawable/girl_6"
android:duration="200"/>
<item
android:drawable="@drawable/girl_7"
android:duration="200"/>
<item
android:drawable="@drawable/girl_8"
android:duration="200"/>
<item
android:drawable="@drawable/girl_9"
android:duration="200"/>
<item
android:drawable="@drawable/girl_10"
android:duration="200"/>
<item
android:drawable="@drawable/girl_11"
android:duration="200"/>
</animation-list>
3.控件中添加一个imageview,设置图片资源,启动动画
//找到imageview
ImageView iv = (ImageView) findViewById(R.id.iv);
//设置背景资源
iv.setBackgroundResource(R.drawable.girl);
//获取动画资源 这句话可能是一个耗时的操作,所以睡眠一段时间再开启动画
final AnimationDrawable background = (AnimationDrawable) iv.getBackground();
new Thread(){public void run() {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
background.start(); //开启动画
};}.start();
补间动画
下面例子代码中的iv是一个imageview控件
AlphaAnimation---透明度动画
/**
* 透明度变化的动画
* @param view
*/
public void alpha(View view) {
AlphaAnimation aa = new AlphaAnimation(0, 1.0f);
//动画播放的时间
aa.setDuration(2000);
//重复次数
aa.setRepeatCount(2);
//设置重复的模式
aa.setRepeatMode(Animation.REVERSE);
iv.startAnimation(aa);
}
RotateAnimation---旋转动画
/**
* 旋转变化的动画
* @param view
*/
public void rotate(View view) {
//旋转度数,旋转相对点
RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//动画播放的时间
ra.setDuration(2000);
//重复次数
ra.setRepeatCount(2);
ra.setRepeatMode(Animation.REVERSE);
iv.startAnimation(ra);
}
TranslateAnimation---位移动画
/**
* 位移变化的动画
* @param view
*/
public void trans(View view) {
TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f,
Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
ta.setDuration(2000);
//重复次数
ta.setRepeatCount(2);
ta.setRepeatMode(Animation.REVERSE);
iv.startAnimation(ta);
}
ScaleAnimation---缩放动画
/**
* 缩放变化的动画
* @param view
*/
public void scale(View view) {
ScaleAnimation sa = new ScaleAnimation(0.1f, 2.0f, 0.1f, 2.0f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f);
sa.setDuration(2000);
//重复次数
sa.setRepeatCount(2);
sa.setRepeatMode(Animation.REVERSE);
sa.setFillAfter(true);//设置填充after的效果
iv.startAnimation(sa);
}
AnimationSet---动画合集
上面的动画都可以加入到动画合集中,然后启动动画合集,合集中的动画效果会一起显示
/**
* 动画集合
* @param view
*/
public void set(View view){
//动画插入器
AnimationSet set = new AnimationSet(false);
RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//动画播放的时间
ra.setDuration(2000);
//重复次数
ra.setRepeatCount(2);
ra.setRepeatMode(Animation.REVERSE);
TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.3f, Animation.RELATIVE_TO_PARENT, 0.3f,
Animation.RELATIVE_TO_PARENT, -0.3f, Animation.RELATIVE_TO_PARENT, 0.3f);
ta.setDuration(2000);
//重复次数
ta.setRepeatCount(2);
ta.setRepeatMode(Animation.REVERSE);
ScaleAnimation sa = new ScaleAnimation(0.1f, 2.0f, 0.1f, 2.0f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f);
sa.setDuration(2000);
//重复次数
sa.setRepeatCount(2);
sa.setRepeatMode(Animation.REVERSE);
set.addAnimation(ra);
set.addAnimation(sa);
set.addAnimation(ta);
iv.startAnimation(set);
}