关闭

Android 动画系列之逐帧(Frame)动画详解

标签: android动画逐帧Frame
944人阅读 评论(0) 收藏 举报
分类:

前言

前段时间太忙了,已经好久没发博客了,好多想写的东西都没时间写,想了想,这个星期就抽时间写一个动画合集吧,把Android中用到的动画做一个大合集。

这一篇就先写Android中最简单也最容易理解的动画:逐帧(Frame)动画吧。逐帧动画是通过一张一张的图片,切换形成的动画,就类似与我们看的胶片电影一样,逐帧动画最简单的使用就是在xml文件中定义要播放的图片文件并设置好时长,然后在代码中获取并播放。下面以一个播放语音的动画小例子来演示一下具体使用。

使用

定义XML文件

在res/drawable/目录下新建一个动画文件,根节点选择animation-list。这里可能有人很好奇,为什么动画文件不是在anim目录下而是在drawable目录下呢?其实逐帧动画对应的类是:AnimationDrawable其父类就是一个Drawable对象。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">

    <item
        android:drawable="@drawable/ic_sound1"
        android:duration="300" />
    <item
        android:drawable="@drawable/ic_sound2"
        android:duration="300" />
    <item
        android:drawable="@drawable/ic_sound3"
        android:duration="300" />

</animation-list>

其中drawable属性就是对应的图片资源,建议将图片放在drawable目录下,以免出现错误。
oneshot :true 播放一次 false 循环播放

代码中启动动画

mSoundView.setImageDrawable(getResources().getDrawable(R.drawable.frame));
mAnim = (AnimationDrawable) mSoundView.getDrawable();
mAnim.start();

我们也可以直接给ImageView设置动画文件为背景,然后直接获取AnimationDrawable再start就可以了。

运行结果:
这里写图片描述

除了用上面的在xml中定义帧动画文件外,我们也可以通过AnimationDrawable对象的addFrame()方法在代码中添加。
另外,AnimationDrawable还有如下方法:

JAVA方法 解释
addFrame(Drawable frame, int duration) 添加一个帧动画
getDuration(int i) 获取角标对应持续时间
getFrame(int index) 获取角标对应帧动画
getNumberOfFrames() 获取帧的动画数(放三张图片返回就是3)
isOneShot() 是否只播放一次
setOneShot(boolean oneShot) 设置是否只播放一次
isRunning() 是否正在运行
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:137412次
    • 积分:1703
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:4篇
    • 译文:0篇
    • 评论:80条
    联系方式
    博客专栏
    最新评论