1. 前言

在App开发中,添加上一些动画,会使我们的应用变得很酷很炫,Android中的动画 分为三大类,逐帧动画(Frame)以及补间动画(Tween),还有Android 3.0以后引入的属性动画 (Property), 我们本篇文章说一下帧动画,逐帧(Frame)动画是最容易理解的,它要求把动画的过程的每张静态图片都搜集起来,然后由Android来控制依次显示这些静态图片,再利用人眼"视觉暂留"的原理,给用户造成"动画"的错觉。逐帧动画的动画原理和放电影的原理是一样的。

2. 实现步骤

Android中实现帧动画,一般我们会用到一个Drawable:AnimationDrawable,编写好Drawable后,然后代码中调用start()以及stop()开始或停止播放动画

定义逐帧动画的格式 my_gif.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"><itemandroid:drawable="@mipmap/img_test1"android:duration="80" /><itemandroid:drawable="@mipmap/img_test2"android:duration="80" /><itemandroid:drawable="@mipmap/img_test3"android:duration="80" /><itemandroid:drawable="@mipmap/img_test4"android:duration="80" /><itemandroid:drawable="@mipmap/img_test5"android:duration="80" />//根据帧数添加''''''''
</animation-list>

这里的android:oneshot是设置动画是否只是播放一次,true只播放一次,false循环播放

android:duration 表示当前帧播放的时间

需要指出的是AnimationDrawable代码的动画默认是不播放的,必须要在代码中启动才可以。

AnimationDrawable 提供了两个方法:

start(): 开始播放动画

stop(): 停止播放动画

一旦程序获取了AnimationDrawable对象之后,接下来就可以用ImageView把它显示出来。

在代码中习惯上把AnimationDrawable设置为ImageView的背景。

3. Demo例子

3.1  界面布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn_start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开始" /><Buttonandroid:id="@+id/btn_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="停止" /><ImageViewandroid:id="@+id/img_show"android:layout_width="120dp"android:layout_height="120dp"android:layout_gravity="center"android:background="@anim/my_gif" /></LinearLayout>

3.2  主界面

我们的MainActivity.java,这里在这里控制动画的开始以及暂停:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_start;private Button btn_stop;private ImageView img_show;private AnimationDrawable anim;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bindViews();//AnimationDrawable设置为ImageView的背景。anim = (AnimationDrawable) img_show.getBackground();}private void bindViews() {btn_start = (Button) findViewById(R.id.btn_start);btn_stop = (Button) findViewById(R.id.btn_stop);img_show = (ImageView) findViewById(R.id.img_show);btn_start.setOnClickListener(this);btn_stop.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_start:anim.start();break;case R.id.btn_stop:anim.stop();break;}}
}

Android 动画系列一之帧动画相关推荐

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

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

  2. Android的三种动画详解(帧动画、View动画、属性动画)

    Android的动画分为了三种, 分别是 帧动画.View动画.属性动画. 1.帧动画 帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放. 帧动画的使用很简单, ...

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

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

  4. iOS动画系列之五:基础动画之缩放篇旋转篇Swift+OC

    这一篇主要介绍基础动画之缩放和旋转.这些基本操作分享完之后,我想想可以找个稍微复杂一点点的动画做做啦. 这篇继续基础篇,分享一下缩放和旋转.因为整体思路和平移基本上没有变化,加上源代码里面也有OC版本 ...

  5. 骨骼动画详解 和 帧动画

     骨骼动画 vs. 精灵表(sprite sheets) 创建动画又快又简单的方法是使用"精灵表"(sprite sheets).当你意识到游戏需要大量动画,内存消耗会涨上来, ...

  6. 将帧动画素材生成为帧动画

    将帧动画素材生成为帧动画 准备 开始 优化帧动画 准备 帧动画素材 gka 介绍及使用 开始 进入到帧动画素材文件夹 Shift + 鼠标右键 打开命令窗口 安装 gka npm i gka -g 安 ...

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

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

  8. Android 动画解析(一) 逐帧动画(Frame Animation)

    简介 开发Android的同学都知道,Android中的动画有逐帧动画(Frame Animation).补间动画(Tween Animation)以及属性动画.其中,逐帧动画(Frame Anima ...

  9. Android游戏开发之游戏帧动画的播放与处理(七)

    雨松MOMO带你走进游戏开发的世界之游戏帧动画的处理 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/a ...

最新文章

  1. 人类是怎么从猩猩身上惹来艾滋病的?人与兽的关系很单纯!
  2. 2018中国AI英雄风云榜:投出你心目中的中国AI领军人!
  3. spring 获取配置文件的值
  4. 搜狗浏览器收藏夹在哪_搜狗浏览器居然流氓到操作我的微博账号
  5. python语法类似php吗_深入学习PHP还是Python
  6. 计算机网络安全基础-网络监听基本概念
  7. 【叁】量化思维--复利
  8. 一文读懂 Linux 各发行版之间的联系和区别
  9. Spring Cloud Alibaba Nacos Config - - - >多配置文件/共享配置
  10. yagni原则_YAGNI喜欢干吻
  11. 第17课 项目成本管理
  12. 海思HI3516板子初体验
  13. spring之----事务
  14. Firebase埋点
  15. 留学日本专业比较: 理工科、文科、与研究
  16. python题目记录(9.25)
  17. 工业智能网关BL110应用之59:如何实现智能楼宇控制BACnet 接入MQTT Client One云平台
  18. Revit二次开发——Ribbon菜单的创建以及各种不同的button(按钮)的代码总结
  19. Ubuntu安装chrome
  20. 基于SpringBoot的社区小型图书管理系统的设计与实现

热门文章

  1. 爆显存:RuntimeError: CUDA out of memory. Tried to allocate 5.66 GiB (GPU 0; 12.00 GiB total capacity; 2
  2. 廖雪峰python信息可视化设计_廖雪峰:数据分析全栈工程师第八期
  3. rabbitmq开启web界面教程
  4. 专注互联网产业链服务 天搜集团赋能传统产业升级
  5. Python中for语句的使用方法
  6. 淘宝店铺提升权重,增加流量的20个小技巧
  7. Linux系统bash漏洞
  8. 16进制每一位存到数组里头
  9. 线上资讯周 | 香港科大商学院MSc项目
  10. 企业云上办公的最佳选择——华为云桌面Workspace