Android 动画系列一之帧动画
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 动画系列一之帧动画相关推荐
- 【Android笔记25】Android中的动画效果之逐帧动画
这篇文章,主要介绍Android中的动画效果之逐帧动画. 目录 一.逐帧动画 1.1.什么是逐帧动画 1.2.逐帧动画的使用 (1)创建drawable动画资源<
- Android的三种动画详解(帧动画、View动画、属性动画)
Android的动画分为了三种, 分别是 帧动画.View动画.属性动画. 1.帧动画 帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放. 帧动画的使用很简单, ...
- andoid逐帧动画oom_Android 逐帧动画:关于 逐帧动画 的使用都在这里了!
前言 目录 目录 1. 作用对象 视图控件(View) 如Android的TextView.Button等等 不可作用于View组件的属性,如:颜色.背景.长度等等 2. 原理 将动画拆分为 帧 的形 ...
- iOS动画系列之五:基础动画之缩放篇旋转篇Swift+OC
这一篇主要介绍基础动画之缩放和旋转.这些基本操作分享完之后,我想想可以找个稍微复杂一点点的动画做做啦. 这篇继续基础篇,分享一下缩放和旋转.因为整体思路和平移基本上没有变化,加上源代码里面也有OC版本 ...
- 骨骼动画详解 和 帧动画
骨骼动画 vs. 精灵表(sprite sheets) 创建动画又快又简单的方法是使用"精灵表"(sprite sheets).当你意识到游戏需要大量动画,内存消耗会涨上来, ...
- 将帧动画素材生成为帧动画
将帧动画素材生成为帧动画 准备 开始 优化帧动画 准备 帧动画素材 gka 介绍及使用 开始 进入到帧动画素材文件夹 Shift + 鼠标右键 打开命令窗口 安装 gka npm i gka -g 安 ...
- Android中的动画2(逐帧动画)
逐帧动画就比较简单了,就是一帧一帧的播放动画,每一帧都是有我们来定义的. 在res/drawable文件夹下新建一个Root element为animation-list的xml文件,命名为anima ...
- Android 动画解析(一) 逐帧动画(Frame Animation)
简介 开发Android的同学都知道,Android中的动画有逐帧动画(Frame Animation).补间动画(Tween Animation)以及属性动画.其中,逐帧动画(Frame Anima ...
- Android游戏开发之游戏帧动画的播放与处理(七)
雨松MOMO带你走进游戏开发的世界之游戏帧动画的处理 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/a ...
最新文章
- 人类是怎么从猩猩身上惹来艾滋病的?人与兽的关系很单纯!
- 2018中国AI英雄风云榜:投出你心目中的中国AI领军人!
- spring 获取配置文件的值
- 搜狗浏览器收藏夹在哪_搜狗浏览器居然流氓到操作我的微博账号
- python语法类似php吗_深入学习PHP还是Python
- 计算机网络安全基础-网络监听基本概念
- 【叁】量化思维--复利
- 一文读懂 Linux 各发行版之间的联系和区别
- Spring Cloud Alibaba Nacos Config - - - >多配置文件/共享配置
- yagni原则_YAGNI喜欢干吻
- 第17课 项目成本管理
- 海思HI3516板子初体验
- spring之----事务
- Firebase埋点
- 留学日本专业比较: 理工科、文科、与研究
- python题目记录(9.25)
- 工业智能网关BL110应用之59:如何实现智能楼宇控制BACnet 接入MQTT Client One云平台
- Revit二次开发——Ribbon菜单的创建以及各种不同的button(按钮)的代码总结
- Ubuntu安装chrome
- 基于SpringBoot的社区小型图书管理系统的设计与实现
热门文章
- 爆显存:RuntimeError: CUDA out of memory. Tried to allocate 5.66 GiB (GPU 0; 12.00 GiB total capacity; 2
- 廖雪峰python信息可视化设计_廖雪峰:数据分析全栈工程师第八期
- rabbitmq开启web界面教程
- 专注互联网产业链服务 天搜集团赋能传统产业升级
- Python中for语句的使用方法
- 淘宝店铺提升权重,增加流量的20个小技巧
- Linux系统bash漏洞
- 16进制每一位存到数组里头
- 线上资讯周 | 香港科大商学院MSc项目
- 企业云上办公的最佳选择——华为云桌面Workspace