逐帧动画(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 classMainActivity 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();

}

}

});

}

}

更多相关文章

  1. Android(安卓)Studio—— 关于在Android(安卓)Studio中使用Asset
  2. Android图片压缩质量参数Bitmap.Config RGB_565、 ARGB_8888的含
  3. Android闪屏页动画不起作用的解决方法
  4. android中selector在java代码中使用无效的解决方案
  5. android HorizontalScrollView替代Gallery
  6. Android:自定义DialogFragment的内容和按钮
  7. 【DiskLruCache完全解析】Android(安卓)AdapterView图片硬盘缓存
  8. Android裁剪图片总结
  9. Android开发之旅:环境搭建及HelloWorld

随机推荐

  1. android:ListView下拉刷新上拉加载更多(Pul
  2. Android:Android基础知识
  3. Android(安卓)硬解码 MediaCodec 遇到的
  4. CyanogenMod源码下载及在模拟器上刷机
  5. Android之NDK开发 Android(安卓)studio
  6. android:SQLiteOpenHelper 与 greenDao
  7. 关于使用InputStreamReader读取GBK编码文
  8. 第75章、再识Intent-调用发送Email程序(从
  9. Android(安卓)studio升级3.0.1遇到的坑及
  10. android跑马灯效果实现(一直滚动不受影响)