简介

开发Android的同学都知道,Android中的动画有逐帧动画(Frame Animation)、补间动画(Tween Animation)以及属性动画。其中,逐帧动画(Frame Animation),是按照一定的顺序播放不同的图像,进而产生动画的效果;补间动画(Tween Animation),也称为View 动画,它支持4种动画效果,分别为平移(translate)、旋转(rotate)、缩放(scale)和透明(alpha),通过View对象做这4种不同的动画,来产生一种动画效果,实际作用的View位置,大小等不会跟随变化;属性动画(Property Animation),是API 11(Android 3.0)的新特性,通过设置View的属性,达到动画的效果。

逐帧动画(Frame Animation)一般也认为是补间动画(Tween Animation)即View 动画。

今天这篇文章详细讲解逐帧动画(Frame Animation)的如何使用。

逐帧动画(Frame Animation)

原理:逐帧动画通过连续播放图片来产生动画的效果。

Drawable Animation 可以让我们按顺序加载一系列的资源来创建一个动画。动画的创建和传统意义上电影胶卷的播放一样,是通过加载不同的图片,然后按顺序进行播放来实现的。在代 码的实现上 AnimationDrawable 类是基于 Drawable animations 来实现的。  要实现逐帧动画(Frame Animation),需要使用AnimationDrawable对象。

PS: 实现逐帧动画(Frame Animation),有两种方式,xml文件和代码。推荐使用xml文件。本文只使用xml文件实现动画效果!

实现逐帧动画(Frame Animation)。

1.  在工程中res/drawable/目录下,新建loadanimation.xml文件。在该XML文件中<animation-list>元素为根节点,<item>节点定义了每一帧,表示一个drawable资源的帧和帧间隔。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"><itemandroid:drawable="@drawable/base_small_loading_1"android:duration="100" /><itemandroid:drawable="@drawable/base_small_loading_2"android:duration="100" /><itemandroid:drawable="@drawable/base_small_loading_3"android:duration="100" /><itemandroid:drawable="@drawable/base_small_loading_4"android:duration="100" /><itemandroid:drawable="@drawable/base_small_loading_5"android:duration="100" /><itemandroid:drawable="@drawable/base_small_loading_6"android:duration="100" /><itemandroid:drawable="@drawable/base_small_loading_7"android:duration="100" /><itemandroid:drawable="@drawable/base_small_loading_8"android:duration="100" /></animation-list>

有8张图像(8张帧),每张图像显示时间为100ms,另外我们可以通过设置 </animation-list> 节点下的 android:oneshot 属性来控制动画的循环次数,如果将 android:oneshot 的属性设置为 true,那么这个动画只会循环一次并停留在最后一帧。如果设置为 false,那么这个动画将会不停的循环下去。

2. 动画使用。

具体看看MainActivity的代码,

package xinxing.animation.test;import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;public class MainActivity extends AppCompatActivity {private ImageView iv;private AnimationDrawable scanAnimation;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//方式一
//        iv = (ImageView) findViewById(R.id.iv_an);
//        iv.setBackgroundResource(R.drawable.loadanimation);
//        scanAnimation = (AnimationDrawable) iv.getBackground();//方式二// 从XML配置文件中读取animatioln-list,初始化AnimationDrawablescanAnimation = (AnimationDrawable) getResources().getDrawable(R.drawable.loadanimation);// ImageView将AnimationDrawable设置为背景iv = (ImageView) findViewById(R.id.iv_an);iv.setBackground(scanAnimation);}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);scanAnimation.start();}
}

代码比较简单,提供了两种方式实现。

PS: start()方法不能在onCreate()函数中调用。因为AnimationDrawable并未完全关联到Window。如果你想立即执行动画而不需要和用户进行交互,使用监听方法onWindowFoucsChanged()。

效果如下截图所示:

总结

实现逐帧动画(Frame Animation),首先需要准备一些图像素材,将这些图像加入到动画xml文件,并且设置显示时间以及循环方式,最后在代码中简单设置即可! 实现逐帧动画(Frame Animation)还是相对比较简单的!

PS: 逐帧动画(Frame Animation)的使用比较简单,但是比较容易引起OOM,所以在使用逐帧动画(Frame Animation)时,应尽量避免使用过多尺寸较大的图片。

Android 动画解析(一) 逐帧动画(Frame Animation)相关推荐

  1. 【Android笔记25】Android中的动画效果之逐帧动画

    这篇文章,主要介绍Android中的动画效果之逐帧动画. 目录 一.逐帧动画 1.1.什么是逐帧动画 1.2.逐帧动画的使用 (1)创建drawable动画资源<

  2. andoid逐帧动画oom_Android 逐帧动画:关于 逐帧动画 的使用都在这里了!

    前言 目录 目录 1. 作用对象 视图控件(View) 如Android的TextView.Button等等 不可作用于View组件的属性,如:颜色.背景.长度等等 2. 原理 将动画拆分为 帧 的形 ...

  3. Android的动画机制一 ----逐帧动画

    逐帧动画( Frame Animation)又叫Drawable Animation 是最简单的最直观的动画类型,主要利用人眼的视觉暂留效应 实现原理:一系列不断变化的图片,按照一定的顺序以及停留时间 ...

  4. Android中的动画2(逐帧动画)

    逐帧动画就比较简单了,就是一帧一帧的播放动画,每一帧都是有我们来定义的. 在res/drawable文件夹下新建一个Root element为animation-list的xml文件,命名为anima ...

  5. java逐帧动画_android的逐帧动画

    逐帧动画是指按照给定的顺序轮流显示一定数目的图像而产生的动画效果.一般应用于比较简单的场景,比如一个监测手机wifi信号强度的应用中,不断的显示wifi信号的强弱程度就比较适合用逐帧动画. 逐帧动画的 ...

  6. Android 用Animation-list实现逐帧动画

    本文转载:http://blog.csdn.net/aminfo/article/details/7847761 第一步:先上图片素材,以下素材放到res/drawable目录下: 第二步:上动画An ...

  7. Android Studio中的逐帧动画

    1,静态图像按顺序播放,把准备好的图片放在drawable中,drawable右击. /New/Drawable Resource File/,创建frame.xml,在 animation-list ...

  8. Android动画之逐帧动画FrameAnimation

    动画入门和进阶文章列表: Animation动画概述和执行原理 Android动画之补间动画TweenAnimation Android动画之逐帧动画FrameAnimation Android动画之 ...

  9. android仿微信红包动画,Android仿微信打开红包动画(逐帧动画)

    Frame Animation(逐帧动画): 逐帧动画(Frame-by-frame Animations)从字面上理解就是一帧挨着一帧的播放图片,就像放电影一样.和补间动画一样可以通过xml实现也可 ...

最新文章

  1. 爬虫之xml和html的区别
  2. zabbix rpm 安装 新增zabbix yum 源 并更新
  3. Java安卓 使用视图组 布局
  4. 快速上手RaphaelJS--RaphaelJS_Starter翻译(三)
  5. chrome插件开发
  6. 史上最详细的Android Studio系列教程四--Gradle基础
  7. 【R】语言第一课-----安装
  8. three.js 源代码凝视(七)Math/Euler.js
  9. Linux修改文件/文件夹权限
  10. 谷歌推出TensorFlow Lattice,让机器学习模型适应总体趋势
  11. QC的七大手法和八大原则
  12. ESXI 6.5安装详细步骤
  13. 做网站有虚拟服务器,虚拟主机只能做网站吗
  14. HKC PG27P5U评测怎么样
  15. SQL的order by函数语法及其用法实例——排序方式
  16. linux的webui服务,Aria2控制前端WebUI客户端安装教程
  17. iOS小技能:设备ID除了使用_idfa、_idfv 还可使用其他替代方案(使用Keychain 存储UUID)
  18. 纯CSS3实现凹凸文字
  19. LeetCode简单题643.子数组的最大平均数I
  20. 计蒜客习题:恋爱纪念日(C语言)

热门文章

  1. 互联网技术研发管理之绩效管理提升
  2. 一米OA任意文件读取漏洞
  3. 关于服务器基本概念汇总
  4. 技巧|微信个性签名,汽车手动挡效果,你喜欢这样的吗?
  5. 知识付费系统源码下载带课程数据+一键同步功能和更新设置
  6. 我撑伞,在石桥上等你
  7. 台式电脑Window系统使用耳机的喇叭和麦克风方法
  8. vue如何动态获取数据改变背景颜色和字体颜色以及获取图片
  9. Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resolution
  10. android 小米键盘输入法,Facemoji输入法小米版