android 喇叭帧动画,Android动画详解-帧动画
帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放。
帧动画的使用很简单,总共就两个步骤:
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动画详解-帧动画相关推荐
- android 创建帧动画,Android 逐帧动画创建实例详解
Android 逐帧动画创建实例详解 前言: 我们看早期电影的时候,电影通常是一张一张播放,用我们现在专有名词来说,就是一帧帧来,安卓同样有这样动画效果的编排形式. 那么我们先定义逐帧动画xml文件 ...
- ANDROID L——Material Design详解(动画篇)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...
- Android 4.1-Jelly Bean新特性详解
Android 4.1Jelly Bean新特性详解 发布会已经结束,Android新一代的4.1版本,代号Jelly Bean(果冻豆)的新系统已经正式问世,除了新架构.全新通知栏和搜索功能之外,实 ...
- Android vector标签 PathData 画图超详解
此文章来源于https://www.cnblogs.com/yuhanghzsd/p/5466846.html点击打开链接 Android vector标签 PathData 画图超详解 SVG是一种 ...
- Android init.rc文件解析过程详解(三)
Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...
- android 辅助功能原理,Android辅助功能原理与基本使用详解-AccessibilityService
Android辅助功能原理与基本使用详解-AccessibilityService 辅助功能原理与基本使用详解 本文主要介绍辅助功能的使用 辅助功能基本原理 辅助功能基本配置和框架搭建 辅助功能实战解 ...
- iOS动画-CAAnimation使用详解
理解了隐式动画后,显式动画就更加通俗易懂了.区别于隐式动画的特点,显式动画就是需要我们明确指定类型.时间等参数来实现效果的动画.除此之外,我们也可以创建非线性动画,比如沿着任意一条曲线运动等: 我们平 ...
- HTML+CSS教程(十)css3(3D属性详解及动画)
一.3D 转换 1.左手坐标系 :伸出左手,让拇指和食指成"L"形,大拇指向右,食指向上,中指指向前方.这样我们就建立了一个左手坐标系,拇指,食指和中指分别代表X.Y.Z 轴的正方 ...
- 《Android 网络开发与应用实战详解》——2.3节Android系统架构
本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.3节Android系统架构,作者 王东华,更多章节内容可以访问云栖社区"异步社区"公 ...
- 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
最新文章
- Java项目:前后端分离网上手机商城平台系统设计和实现(java+vue+redis+springboot+mysql+ssm)
- C++ 经常使用类 string类
- python基础课程_学习笔记13:标准库:有些收藏夹——sys
- ASP.NET 2.0关于用户登录限制问题实例:防止同一用户同时登陆
- LinDaiDai的 2019 面试准备
- 何时使用构造函数,构造函数使用new关键字
- hutool获取5天前的日期_JavaSE基础:18个Java8处理日期的新花样,肯定没用过!
- 光流 | 基于Lukas-Kanade光流法的目标跟踪(附C++代码)
- 1.3.3 系统调用(执行过程、访管指令、库函数与系统调用)
- Two Merged Sequences
- VTK:简单操作之UniformRandomNumber
- 优迈系统服务器初始化,优迈系统手机操作器服务器操作使用说明.pptx
- 禁用内置键盘_如何禁用Windows 10的所有内置广告
- python模板语言_django的模板语言
- 【Openstack】实录手动部署Openstack Rocky 双节点(2)- Keystone
- 人类历史上有哪些逆天的文物?
- clear与resize
- 网络知识汇总(基于W5500以太网)
- 数据结构与算法分析题库
- C#打开文件夹加载图片
热门文章
- b站视频上传软件操作视频教程
- linux零拷贝实现程序,浅析零拷贝技术
- easyexcle 设置列宽_easyexcel自动列宽失效
- 【移动通信】5GC:5G网络切片
- 得墨忒耳法则(迪米特法则)
- Eclipse_SVN文件冲突、标记为合并
- 离散数学__第2章命题逻辑的推理理论__真题讲解_(涉及对称差㊉)
- baidupcsgo安卓_百度网盘不限速下载器BaiduPCS-Go如何使用?
- 二十一世纪大学英语读写教程(第四册)学习笔记(原文)——5 - Prison Studies(狱中学习)
- 笔记本空间清理,彻底清理C盘空间