Android逐帧动画的简单使用-语音播放效果的实现
2016-07-02 00:03
746 查看
逐帧动画(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();
}
}
});
}
}
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();
}
}
});
}
}
相关文章推荐
- Gifski:一个跨平台的高质量 GIF 编码器
- 模仿动画的放大缩小容器
- jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
- Android实现定制返回按钮动画效果的方法
- Android中ViewFlipper的使用及设置动画效果实例详解
- jQuery实现美观的多级动画效果菜单代码
- php判断GIF图片是否为动画的方法
- jQuery实现动画效果circle实例
- HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
- 浅析JavaScript动画
- js排序动画模拟-插入排序
- javascript+HTML5的Canvas实现Lab单车动画效果
- 基于javascript实现漂亮的页面过渡动画效果附源码下载
- js实现按钮颜色渐变动画效果
- 超赞的jQuery图片滑块动画特效代码汇总
- jQuery实现连续动画效果实例分析
- 利用jquery制作滚动到指定位置触发动画
- jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
- jQuery实现带有洗牌效果的动画分页实例
- jQuery动画效果相关方法实例分析