逐帧动画(Frame-By-Frame Animation)原理很简单,即快速切换不同的图片,形成动画效果。Android中逐帧动画的实现方式也很简单,下面以语音播放效果为例说明。
1. 首先准备图片素材
三张图片分别命名为play1.png, play2.png, play3.png,放入drawable目录下,图片如下:
2. 编写anim.xml文件,放人drawable目录下,文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<animation-listxmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/play3"android:duration="200"/>
<item android:drawable="@drawable/play2"android:duration="200"/>
<item android:drawable="@drawable/play1"android:duration="200"/>
</animation-list>
(注:1,oneshot表示是否循环播放,true表示不循环,false表示循环,duration表示间隔时间
2,三张图片所在item的顺序,表示播放顺序,即按照play3-play2-play1顺序播放)
3. 编写activity_main.xml布局,将上面的anim.xml设置为ImageView的背景。文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/startAnim"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_weight="1"
android:text="startAnim"/>
<Button
android:id="@+id/stopAnim"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_weight="1"
android:text="stopAnim"/>
</LinearLayout>
<ImageView
android:id="@+id/ivAnim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/anim"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
预览图片如下图:
4. 获取ImageView的背景,强转成AnimationDrawable,然后分别调用start()和stop()来控制动画的开始与停止,java代码如下:
packagecom.example;
importandroid.app.Activity;
importandroid.graphics.drawable.AnimationDrawable;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.ImageView;
public class MainActivity extends Activity {
// 开始按钮/停止按钮
private Button startAnim;
private Button stopAnim;
private AnimationDrawabledrawable;
private ImageView ivAnim;
@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 控件初始化
startAnim =(Button) findViewById(R.id.startAnim);
stopAnim =(Button) findViewById(R.id.stopAnim);
ivAnim =(ImageView) findViewById(R.id.ivAnim);
drawable = (AnimationDrawable)ivAnim.getBackground();
// 开始按钮设置监听器
startAnim.setOnClickListener(newOnClickListener() {
@Override
public voidonClick(View v) {
if (drawable !=null) {
drawable.start();
}
}
});
// 停止按钮设置监听器
stopAnim.setOnClickListener(newOnClickListener() {
@Override
public voidonClick(View v) {
if (drawable !=null) {
drawable.stop();
}
}
});
}
}