帧动画实现的第一种方式的步骤:
利用xml文件的形式实现:
(1)找一些图片放到drawable文件夹下
(2)在drawable文件夹下通过xml文件生成动画 创建的就是一个animation_list的一个xml文件
android:oneshot="false" >//设置是否循环播放,默认的是循环播放,false为只播放一次
- android:drawable="@drawable/img1"
android:duration="50"/>
- android:drawable="@drawable/img2"
android:duration="50"/>
- android:drawable="@drawable/img3"
android:duration="50"/>
(3)找到咱们写的那个动画xml
(4)通过imageView设置一个背景图
(5)通过动画对象的start(),stop()方法来开启或者是停止动画。
public class ToXMLActivity extends Activity {
private Button btn_start, btn_stop;
private ImageView iv_frame;
private AnimationDrawable frameAnim;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frameanim);
btn_start = (Button) findViewById(R.id.btn_start);
btn_stop = (Button) findViewById(R.id.btn_stop);
btn_start.setOnClickListener(click);
btn_stop.setOnClickListener(click);
iv_frame = (ImageView) findViewById(R.id.iv_frame);
// 通过逐帧动画的资源文件获得AnimationDrawable示例
frameAnim=(AnimationDrawable) getResources().getDrawable(R.drawable.bullet_anim);
// 把AnimationDrawable设置为ImageView的背景
iv_frame.setBackgroundDrawable(frameAnim);
}
private View.OnClickListener click = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
start();
break;
case R.id.btn_stop:
stop();
break;
default:
break;
}
}
};
protected void start() {
if (frameAnim != null && !frameAnim.isRunning()) {
frameAnim.start();
Toast.makeText(ToXMLActivity.this, "开始播放", 0).show();
Log.i("main", "index 为5的帧持续时间为:"+frameAnim.getDuration(5)+"毫秒");
Log.i("main", "当前AnimationDrawable一共有"+frameAnim.getNumberOfFrames()+"帧");
}
}
protected void stop() {
if (frameAnim != null && frameAnim.isRunning()) {
frameAnim.stop();
Toast.makeText(ToXMLActivity.this, "停止播放", 0).show();
}
}
}
帧动画实现的第二种方式的步骤:
利用代码的形式实现:
(1)创建图片动画的对象
(2) 一帧一帧的添加图片,并且设置了显示时间
(3 设置是否为循环播放 默认的就是只播放一次
(4)开启动画,或者停止动画
public class ToCodeActivity extends Activity {
private Button btn_start, btn_stop;
private ImageView iv_frame;
private AnimationDrawable frameAnim;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frameanim);
btn_start = (Button) findViewById(R.id.btn_start);
btn_stop = (Button) findViewById(R.id.btn_stop);
btn_start.setOnClickListener(click);
btn_stop.setOnClickListener(click);
iv_frame = (ImageView) findViewById(R.id.iv_frame);
frameAnim =new AnimationDrawable();
// 为AnimationDrawable添加动画帧
frameAnim.addFrame(getResources().getDrawable(R.drawable.img0), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img1), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img2), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img3), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img4), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img5), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img6), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img7), 50);
// 设置为循环播放
frameAnim.setOneShot(false);
// 设置ImageView的背景为AnimationDrawable
iv_frame.setBackgroundDrawable(frameAnim);
}
private View.OnClickListener click = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
start();
break;
case R.id.btn_stop:
stop();
break;
default:
break;
}
}
};
protected void start() {
if (frameAnim != null && !frameAnim.isRunning()) {
frameAnim.start();
Toast.makeText(ToCodeActivity.this, "开始播放", 0).show();
}
}
protected void stop() {
if (frameAnim != null && frameAnim.isRunning()) {
frameAnim.stop();
Toast.makeText(ToCodeActivity.this, "停止播放", 0).show();
}
}
}
两种实现方式的区别:xml文件生成的动画默认的是循环播放,java代码生成的动画默认是只播放一次
注意:如果在一个项目文件夹下有两个或两个以上的Activity要在清单文件下注册声明