帧动画简介

介绍帧动画之前先了解一下‘帧’的概念:帧,影像动画中最小单位,也就是最小的单幅画面。相当于电影脚上的每一格镜头。一帧就是最小的一张单幅画面,多个帧连接在一起就会形成动画。通常所说的帧数,是指的1s时间内传输的帧的数量,也可以理解成图形处理器1s能够刷新的频率。每一帧都是一个静止的图像,快速持续的显示多个连续的帧图像便会形成运动的假象,也就是所谓的帧动画。

帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 因为逐帧动画的帧序列内容不一样,不但给制作增加了负担而且最终输出的文件量也很大,但它的优势也很明显:逐帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容,而它类似与电影的播放模式,很适合于表演细腻的动画。例如:人物或动物急剧转身、 头发及衣服的飘动、走路、说话以及精致的3D效果等等。

简单来讲,帧动画的本质就是将很多张预先做好的具有连续性的图片在一定时间内快速持续显示出来。

帧动画实现方式

Android中实现帧动画也很简单,主要有通过xml和代码两种方式,下面通过一个小鸟飞翔的动画demo分别介绍这两种方式。

xml方式

通过xml的方式有一下几个步骤:

1. 创建xml动画资源文件
2. 布局文件中引入动画文件
3. 代码控制动画的开始和结束

1. 创建xml动画资源文件

帧动画的每一帧都是一张静态图片,所以完成这个demo需要多张动作连续的静态图片。准备好图片之后将图片放到Drawable文件夹中,然后在drawable文件夹中创建动画xml文件anim_test.xml,动画文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"><itemandroid:drawable="@drawable/test01"android:duration="200" /><itemandroid:drawable="@drawable/test02"android:duration="200" /><itemandroid:drawable="@drawable/test03"android:duration="200" /><itemandroid:drawable="@drawable/test04"android:duration="200" /><itemandroid:drawable="@drawable/test05"android:duration="200" /><itemandroid:drawable="@drawable/test06"android:duration="200" /><itemandroid:drawable="@drawable/test07"android:duration="200" /><itemandroid:drawable="@drawable/test08"android:duration="200" />
</animation-list>

2. 布局文件中引入动画资源

将imageview的背景设置成图片资源文件, 关键代码如下:

<androidx.appcompat.widget.AppCompatImageViewandroid:id="@+id/iv_anim"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/anim"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"/>

3. 代码控制动画的开始和结束

首先通过imageview获取背景资源,并且将背景资源强转成AnimationDrawable,分别调用其start和stop方法控制动画的开始和结束。关键代码如下:

final AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();btn_start.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {animationDrawable.start();}});btn_cancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {animationDrawable.stop();}});

以上是通过xml的方式实现帧动画demo,接下来通过代码方式实现。

代码方式

通过代码方式实现主要有以下几个步骤:

1. 准备图片
2. 设定图片资源数组
3. 遍历图片资源数组,添加每一帧动画并设定时长
4. 设定是否循环播放
5. 将动画设置到控件背景上
6. 开启动画

核心代码如下:

public void startByCode(){//创建一个AnimationDrawableAnimationDrawable animationDrawable1 = new AnimationDrawable();//准备好资源图片int[] ids = {R.drawable.test01,R.drawable.test02,R.drawable.test03,R.drawable.test04,R.drawable.test05,R.drawable.test06,R.drawable.test07,R.drawable.test08};//通过for循环添加每一帧动画for(int i = 0 ; i < 8 ; i ++){Drawable frame = getResources().getDrawable(ids[i]);//设定时长animationDrawable1.addFrame(frame,200);}//是否循环播放animationDrawable1.setOneShot(false);//将动画设置到背景上imageView.setBackground(animationDrawable1);//开启帧动画animationDrawable1.start();}

Android动画学习之帧动画相关推荐

  1. android 同根动画_Android(java)学习笔记141:Android下的逐帧动画(Drawable Animation)...

    1. 帧动画: 帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一 ...

  2. android 张口逐帧动画,《Android 动画》逐帧动画

    关于 Android 的动画学习可以分为以下几个大类: 逐帧动画 补间动画(也说 View 动画) 属性动画 转场动画 这里注意,我只是从学习的角度分为了这四类:从面试的角度,只需要说前面三类,转场动 ...

  3. Android动画攻略—帧动画、补间动画、属性动画

    前言 动画时Android开发中使用频率比较高的功能. 对Android提供的补间动画,帧动画以及属性动画做出归纳总结. 目录 1. 帧动画 帧动画总体实现比较简单,其实现本身是实现一个图片集的连续播 ...

  4. Android自定义控件:动画类---逐帧动画AnimationDrawable

    1:概述 Android动画包括View Animation(视图动画)和Property Animator(属性动画),而View Animation包括Tween Animation(补间动画)和 ...

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

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

  6. Android App开发动画特效中帧动画和电影淡入淡出动画的讲解及实战(附源码和演示视频 简单易懂)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.帧动画 Android的动画分为三类,帧动画,补间动画和属性动画.其中帧动画是实现原理最简单的一种,跟现实生活中的电影胶卷类似,都是在短时间内连续 ...

  7. Android动画之逐帧动画FrameAnimation

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

  8. 安卓动画全解:补间动画(视图动画)、布局动画、属性动画、逐帧动画。动画Animation属性、Alpha属性、Scale属性、Translate属性、Rotate属性,动画集AnimationSet

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓动画全解:补间动画(视图动画).布局动画.属性动画.逐帧动画. 主要内容包含:动画Animation属性.Alpha属性.Scale属性.Tran ...

  9. css动画帧动画效果,CSS3动画之逐帧动画

    什么是逐帧动画 要了解 CSS3 逐帧动画,首先要明确什么是逐帧动画. 看一下维基百科中的定义: 定格动画,又名逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果. 简而言之 ...

最新文章

  1. 软工作业 5:词频统计——增强功能
  2. 【机器学习算法-python实现】矩阵去噪以及归一化
  3. 设计模式到底离我们有多远
  4. HDU-6599 I Love Palindrome String(回文自动机+字符串hash)
  5. MongoDB 之 幽灵操作避免
  6. Nginx + Tomcat 配置负载均衡集群
  7. pycharm中如何调用Anoconda的库
  8. 从零开始学Go之并发(四):互斥
  9. SpringMVC系列(十四)Spring MVC的运行流程
  10. GDB scheduler-locking 命令详解
  11. abaqus切削为什么没有切屑_金属高速切削的ABAQUS仿真(下)
  12. 超酷的jQuery百叶窗图片滑块实现教程
  13. 关于js中的then()
  14. matlab报错Unbalanced or unexpected parenthesis or bracket.
  15. 鸿蒙系统用的什么代码,鸿蒙系统是用什么语言开发的?
  16. 科学计算自由软件SCILAB
  17. 怎么在线压缩PDF文件?常见途径说明
  18. qt html 字体加粗,Qt 之字体设置(QFont)详解
  19. 肝完《浏览器基本原理与实践》的精华分享
  20. 读书笔记:《程序员修炼之道:通向务实的最高境界》

热门文章

  1. 浏览器和手机显示不同样式
  2. 数据库三大范式通俗理解
  3. 零基础入门 | 如何用Python实现12306火车票实时查询?
  4. android+注销功能,Android app注销账号和完全退出简单实现
  5. 【php毕业设计】基于php+mysql+apache的subversion用户管理系统设计与实现(毕业论文+程序源码)——用户管理系统
  6. 串口助手、网络调试助手、CAN通讯、校验和工具、浮点转换工具
  7. 微信小程序--》从零实现小程序项目案例
  8. 抖音短视频脚本制作的一些技巧,快快收藏起来!
  9. ssm框架搭建连接mysql_ssm框架搭建(详细)
  10. 14 Flask mega-tutorial 第14章 Ajax(百度翻译API):异步JavaScript和XML的缩写(Asynchronous Javascript And XML)