Android逐帧动画的实现
在处理耗时工作的时候,大多数会弹出一个加载的框,里面有一个连续旋转的图片,很多时候都是用一张图片,使用rotate来设定旋转,不过看起来不太美观,没有形象感,在3.0之前Android有两种动画效果分别是补间动画和帧动画,用一张图片实现的是使用补间动画,定义给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变。我个人比较倾向的是帧动画,不过这个需要美工的支持,还有一种方式就是通过反编译其他的软件获取图片,我不是美工也没有美工的支持,所以就解压QQ的apk,获取它里面的显示加载动画的图片,图片资源http://download.csdn.net/download/jwzhangjie/6852981。
看看如何实现的
load_animation_1.xml
- <?xml version="1.0" encoding="utf-8"?>
- <!--
- 根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
- 根标签下,通过item标签对动画中的每一个图片进行声明
- android:duration 表示展示所用的该图片的时间长度
- -->
- <animation-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false"
- >
- <item android:drawable="@drawable/qb_tenpay_loading_1" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_2" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_3" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_4" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_5" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_6" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_7" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_8" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_9" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_10" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_11" android:duration="150"></item>
- <item android:drawable="@drawable/qb_tenpay_loading_12" android:duration="150"></item>
- </animation-list>
load_animation_2.xml
- <?xml version="1.0" encoding="utf-8"?>
- <!--
- 根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
- 根标签下,通过item标签对动画中的每一个图片进行声明
- android:duration 表示展示所用的该图片的时间长度
- -->
- <animation-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false"
- >
- <item android:drawable="@drawable/common_loading_0" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_1" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_2" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_3" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_4" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_5" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_6" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_7" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_8" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_9" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_10" android:duration="150"></item>
- <item android:drawable="@drawable/common_loading_11" android:duration="150"></item>
- </animation-list>
wifi_animation_1.xml
- <?xml version="1.0" encoding="utf-8"?>
- <animation-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false"
- >
- <item android:drawable="@drawable/wifi_1" android:duration="150"></item>
- <item android:drawable="@drawable/wifi_2" android:duration="150"></item>
- <item android:drawable="@drawable/wifi_3" android:duration="150"></item>
- <item android:drawable="@drawable/wifi_4" android:duration="150"></item>
- <item android:drawable="@drawable/wifi_5" android:duration="150"></item>
- <item android:drawable="@drawable/wifi_6" android:duration="150"></item>
- </animation-list>
布局文件:
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="动画加载1"
- android:id="@android:id/button1"
- ></Button>
- <Button
- android:id="@android:id/button2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@android:id/button1"
- android:layout_marginLeft="20dip"
- android:text="动画加载2"
- />
- <Button
- android:id="@android:id/button3"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@android:id/button2"
- android:layout_marginLeft="20dip"
- android:text="动画wifi1"
- />
- <ImageView
- android:id="@+id/animationIV"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:contentDescription="@string/app_name"
- />
- <ImageView
- android:id="@+id/animationIV2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@id/animationIV"
- android:src="@anim/load_animation_2"
- android:contentDescription="@string/app_name"
- android:layout_alignBottom="@id/animationIV"
- android:layout_marginLeft="30dip"
- />
- <ImageView
- android:id="@+id/animationIV3"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_above="@id/animationIV"
- android:contentDescription="@string/app_name"
- android:layout_marginTop="20dip"
- />
- </RelativeLayout>
- public class Test extends BaseActivity{
- private Button button1,button2,button3;
- private ImageView animationIV;
- private ImageView animationIV2;
- private ImageView animationIV3;
- private AnimationDrawable AniDraw, AniDraw2, AniDraw3;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test);
- button1 = (Button)findViewById(android.R.id.button1);
- button1.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (AniDraw.isRunning()) {
- AniDraw.stop();
- }else {
- AniDraw.start();
- }
- }
- });
- button2 = (Button)findViewById(android.R.id.button2);
- button2.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (AniDraw2.isRunning()) {
- AniDraw2.stop();
- }else {
- AniDraw2.start();
- }
- }
- });
- button3 = (Button)findViewById(android.R.id.button3);
- button3.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (AniDraw3.isRunning()) {
- AniDraw3.stop();
- }else {
- AniDraw3.start();
- }
- }
- });
- animationIV = (ImageView)findViewById(R.id.animationIV);
- /**
- * 这里设置的是setBackgroundResource,那么你获取的时候通过getBackground
- */
- animationIV.setBackgroundResource(R.anim.load_animation_1);
- AniDraw = (AnimationDrawable)animationIV.getBackground();
- /**
- * 在xml里面通过src来设置跟在代码里面使用setImageResource获取的时候通过getDrawable
- * 例如:animationIV2.setImageResource(R.anim.load_animation_2);是一样的
- */
- animationIV2 = (ImageView)findViewById(R.id.animationIV2);
- AniDraw2 = (AnimationDrawable)animationIV2.getDrawable();
- animationIV3 = (ImageView)findViewById(R.id.animationIV3);
- animationIV3.setImageResource(R.anim.wifi_animation_1);
- AniDraw3 = (AnimationDrawable)animationIV3.getDrawable();
- }
转载于:https://www.cnblogs.com/Small-Life/p/4320258.html
Android逐帧动画的实现相关推荐
- Android 逐帧动画(Frame)
Android 逐帧动画(Frame) 很好理解就是将多张图片放到一个容器里面通过控制这些图片一帧一张图片从而形成动画 使用的使用通过AnimationDrawable 加载放好的图片 然后通过调用 ...
- Android逐帧动画——让图片动起来
Android逐帧动画--让图片动起来 前言:逐帧动画要求开发者把动画过程的每张静态图片都收集起来,然后由android来控制依次显示这些静态图片,然后利用人眼视觉暂留的原理,给用户造成"动 ...
- android 创建帧动画,Android 逐帧动画创建实例详解
Android 逐帧动画创建实例详解 前言: 我们看早期电影的时候,电影通常是一张一张播放,用我们现在专有名词来说,就是一帧帧来,安卓同样有这样动画效果的编排形式. 那么我们先定义逐帧动画xml文件 ...
- android 逐帧动画自动播放以及逐帧动画与渐变动画结合的停止问题
关于逐帧动画的自动播放: android 逐帧动画一般不能直接在onCreat()方法里直接调用.start(),否则只是播放动画的第一帧,可重写onWindowFocusChanged(boolea ...
- android语音动画,Android逐帧动画的简单使用-语音播放效果的实现
逐帧动画(Frame-By-Frame Animation)原理很简单,即快速切换不同的图片,形成动画效果.Android中逐帧动画的实现方式也很简单,下面以语音播放效果为例说明. 1. 首先准备图片 ...
- Android逐帧动画和补间动画
本篇博客来看一下Android中的逐帧动画和补间动画. 一.逐帧动画 逐帧动画也叫Drawable Animation. 在Android中实现逐帧动画,就是由设计师给出一系列状态不断变化的图片, 开 ...
- Android -- 逐帧动画
在处理耗时工作的时候,大多数会弹出一个加载的框,里面有一个连续旋转的图片,很多时候都是用一张图片,使用rotate来设定旋转,不过看起来不太美观,没有形象感,在3.0之前Android有两种动画效果分 ...
- android 张口逐帧动画,Android中实现一个简单的逐帧动画(附代码下载)
场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 实现 首先准备一组不同表情的照片,放在res/drawable下,然后在此目录下新建动画资源文件fairy.xml 这 ...
- android 播放gif动画效果,android 通过帧动画方式播放Gif动画
注意:经过本人测试,这个方法很耗内存, 图片一多就崩了.慎用 <1>用工具(photoshop或者FireWorks)将GIF动画图片分解成多个GIF静态图片,然后保存在res\drawa ...
- Android自定义控件:动画类---逐帧动画AnimationDrawable
1:概述 Android动画包括View Animation(视图动画)和Property Animator(属性动画),而View Animation包括Tween Animation(补间动画)和 ...
最新文章
- Android 知识杂记(MVP模式)
- LeetCode实战:旋转链表
- ACMNO.2 输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。 输入 一个华氏温度,浮点数 输出 摄氏温度,浮点两位小数
- Axure RP使用攻略--入门级(七)之axure元件使用思路的补充
- 庆祝杭州移动电视诞生一周年
- boost::first_scalar的测试程序
- docker的镜像创建与Dockefile的编写
- 万字长文 - 解读功能开关 | IDCF
- linux安装软件包(pip, distribute, nose, virtualenv)
- testNG之组测试
- 6-4 二叉树的非递归遍历 (25分)_本周小结!(二叉树)
- 面试题9:斐波那契数列
- Kotlin入门(3)基本变量类型的用法
- AutoCAD.net(一):更改AutoCAD窗口的标题和图标
- python截图识别文字_python截图并转换文字
- idea和搜狗输入法快捷键冲突_Win10 输入法简繁体快捷键与 IDEA 冲突
- 智能优化算法:斑点鬣狗优化算法-附代码
- 如何从0到1打磨一门 Elasticsearch 线上直播课?
- 1.4.3 ASBR-Summary-LSA
- Unity3D消耗CPU过高解决办法
热门文章
- GO语言开发天天生鲜项目第四天 商品后台管理
- [项目管理] ISO900X 标准体系
- im即时通讯源码/uniapp即时通讯im源码附视频安装教程
- python excel图表 导出word模板_使用python将Excel数据填充Word模板并生成Word
- 计算机实验excel总结,EXCEL实验报告
- python清洗数据去除停用词_python去除停用词(结巴分词下)
- 手把手教你如何下载编译Spring源码
- staruml顺序图转通信图_【航图详解】ICAO机场图!
- 2.4GHz频段天线的选择
- 公司用的非标普通自动化用单片机还是plc_高级电气自动化工程师必备十大技能...