Android逐帧动画的简单使用-语音播放效果的实现

时间:2022-09-11 08:56:23

逐帧动画(Frame-By-Frame Animation)原理很简单,即快速切换不同的图片,形成动画效果。Android中逐帧动画的实现方式也很简单,下面以语音播放效果为例说明。

1. 首先准备图片素材

三张图片分别命名为play1.png,  play2.png,  play3.png,放入drawable目录下,图片如下:

Android逐帧动画的简单使用-语音播放效果的实现  Android逐帧动画的简单使用-语音播放效果的实现  Android逐帧动画的简单使用-语音播放效果的实现

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>

预览图片如下图:

Android逐帧动画的简单使用-语音播放效果的实现


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();

                }

            }

        });

    }

}