Airsaid

改变世界的不是技术,而是技术背后的梦想。

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

前言

前段时间太忙了,已经好久没发博客了,好多想写的东西都没时间写,想了想,这个星期就抽时间写一个动画合集吧,把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() 是否正在运行
阅读更多
版权声明:欢迎转载,转载请注明出处。 如果本文帮助到你,本人不胜荣幸,如果浪费了你的时间,本人深感抱歉。如果有什么错误,请一定指出,以免误导大家、也误导我。感谢关注。 https://blog.csdn.net/Airsaid/article/details/51559797
个人分类: Android
所属专栏: Android 基础知识
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭