帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放。

帧动画的使用很简单,总共就两个步骤:

1、在res/drawable目录下定义一个XML文件,根节点为系统提供的animation-list,然后放入定义更好的图片;

2、使用AnimationDrawable类播放第一步定义好的Drawable中的图片,形成动画效果;

xml定义资源

android:oneshot="false">

// android:oneshot=“false”: 表示是否重复播放动画,还是只播放一次;

// 每个item都有Drawable和duration属性,Drawable表示我们要播放的图片;duration表示这张图播放的时间;

java 代码创建

imageView_2 = findViewById(R.id.image_2);

AnimationDrawable animationDrawable1 = new AnimationDrawable();

animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_1 ),200);

animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_2 ),200);

animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_3 ),200);

animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_4 ),200);

animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_5 ),200);

animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_6 ),200);

animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_7 ),200);

animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_8 ),200);

animationDrawable1.setOneShot(true);

imageView_2.setImageDrawable(animationDrawable1);

animationDrawable1.start();

运行

Button button = (Button) findViewById(R.id.bt_001);

button.setBackgroundResource(R.drawable.frame_animation);//把Drawable设置为button的背景

//拿到这个我们定义的Drawable,实际也就是AnimationDrawable

AnimationDrawable animationDrawable = (AnimationDrawable) button.getBackground();

animationDrawable.start();//开启动画

AnimationDrawable

AnimationDrawable继承自Drawable。

AnimationDrawable会一次性把所有图片加载到内存中。

我们是通过xml文件保存帧动画信息的,所以从Drawable.createFromXml()方法看起:

构造函数

public AnimationDrawable() {

this(null, null);

}

private AnimationDrawable(AnimationState state, Resources res) {

final AnimationState as = new AnimationState(state, this, res);

setConstantState(as);

if (state != null) {

setFrame(0, true, false);

}

}

AnimationState

内部类

private final static class AnimationState extends DrawableContainerState {

private int[] mDurations; // 保存图片资源的

private boolean mOneShot = false; // 是否显示一次 控制循环播放动画

// 添加一帧图片

public void addFrame(Drawable dr, int dur) {

// Do not combine the following. The array index must be evaluated before

// the array is accessed because super.addChild(dr) has a side effect on mDurations.

int pos = super.addChild(dr);

mDurations[pos] = dur;

}

}

start() 开启动画

@Override

public void start() {

mAnimating = true;

if (!isRunning()) {

// Start from 0th frame.

setFrame(0, false, mAnimationState.getChildCount() > 1 || !mAnimationState.mOneShot);

}

}

private void setFrame(int frame, boolean unschedule, boolean animate) {

// 当前frame是否超过了现实的范围

if (frame >= mAnimationState.getChildCount()) {

return;

}

mAnimating = animate;

mCurFrame = frame;

selectDrawable(frame);

if (unschedule || animate) {

unscheduleSelf(this);

}

if (animate) {

// Unscheduling may have clobbered these values; restore them

mCurFrame = frame;

mRunning = true;

scheduleSelf(this, SystemClock.uptimeMillis() + mAnimationState.mDurations[frame]);

}

}

android 喇叭帧动画,Android动画详解-帧动画相关推荐

  1. android 创建帧动画,Android 逐帧动画创建实例详解

    Android 逐帧动画创建实例详解 前言: 我们看早期电影的时候,电影通常是一张一张播放,用我们现在专有名词来说,就是一帧帧来,安卓同样有这样动画效果的编排形式. 那么我们先定义逐帧动画xml文件 ...

  2. ANDROID L——Material Design详解(动画篇)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  3. Android 4.1-Jelly Bean新特性详解

    Android 4.1Jelly Bean新特性详解 发布会已经结束,Android新一代的4.1版本,代号Jelly Bean(果冻豆)的新系统已经正式问世,除了新架构.全新通知栏和搜索功能之外,实 ...

  4. Android vector标签 PathData 画图超详解

    此文章来源于https://www.cnblogs.com/yuhanghzsd/p/5466846.html点击打开链接 Android vector标签 PathData 画图超详解 SVG是一种 ...

  5. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  6. android 辅助功能原理,Android辅助功能原理与基本使用详解-AccessibilityService

    Android辅助功能原理与基本使用详解-AccessibilityService 辅助功能原理与基本使用详解 本文主要介绍辅助功能的使用 辅助功能基本原理 辅助功能基本配置和框架搭建 辅助功能实战解 ...

  7. iOS动画-CAAnimation使用详解

    理解了隐式动画后,显式动画就更加通俗易懂了.区别于隐式动画的特点,显式动画就是需要我们明确指定类型.时间等参数来实现效果的动画.除此之外,我们也可以创建非线性动画,比如沿着任意一条曲线运动等: 我们平 ...

  8. HTML+CSS教程(十)css3(3D属性详解及动画)

    一.3D 转换 1.左手坐标系 :伸出左手,让拇指和食指成"L"形,大拇指向右,食指向上,中指指向前方.这样我们就建立了一个左手坐标系,拇指,食指和中指分别代表X.Y.Z 轴的正方 ...

  9. 《Android 网络开发与应用实战详解》——2.3节Android系统架构

    本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.3节Android系统架构,作者 王东华,更多章节内容可以访问云栖社区"异步社区"公 ...

  10. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

最新文章

  1. Java项目:前后端分离网上手机商城平台系统设计和实现(java+vue+redis+springboot+mysql+ssm)
  2. C++ 经常使用类 string类
  3. python基础课程_学习笔记13:标准库:有些收藏夹——sys
  4. ASP.NET 2.0关于用户登录限制问题实例:防止同一用户同时登陆
  5. LinDaiDai的 2019 面试准备
  6. 何时使用构造函数,构造函数使用new关键字
  7. hutool获取5天前的日期_JavaSE基础:18个Java8处理日期的新花样,肯定没用过!
  8. 光流 | 基于Lukas-Kanade光流法的目标跟踪(附C++代码)
  9. 1.3.3 系统调用(执行过程、访管指令、库函数与系统调用)
  10. Two Merged Sequences
  11. VTK:简单操作之UniformRandomNumber
  12. 优迈系统服务器初始化,优迈系统手机操作器服务器操作使用说明.pptx
  13. 禁用内置键盘_如何禁用Windows 10的所有内置广告
  14. python模板语言_django的模板语言
  15. 【Openstack】实录手动部署Openstack Rocky 双节点(2)- Keystone
  16. 人类历史上有哪些逆天的文物?
  17. clear与resize
  18. 网络知识汇总(基于W5500以太网)
  19. 数据结构与算法分析题库
  20. C#打开文件夹加载图片

热门文章

  1. b站视频上传软件操作视频教程
  2. linux零拷贝实现程序,浅析零拷贝技术
  3. easyexcle 设置列宽_easyexcel自动列宽失效
  4. 【移动通信】5GC:5G网络切片
  5. 得墨忒耳法则(迪米特法则)
  6. Eclipse_SVN文件冲突、标记为合并
  7. 离散数学__第2章命题逻辑的推理理论__真题讲解_(涉及对称差㊉)
  8. baidupcsgo安卓_百度网盘不限速下载器BaiduPCS-Go如何使用?
  9. 二十一世纪大学英语读写教程(第四册)学习笔记(原文)——5 - Prison Studies(狱中学习)
  10. 笔记本空间清理,彻底清理C盘空间