Android画图学习总结(四)——Animation(上)
随着对Drewable的深入了解,发现了Drawable更加强大的功能:显示Animation。Android SDK介绍了2种Animation:
- Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果
- Frame Animation:顺序播放事先做好的图像,跟电影类似
在使用Animation前,我们先学习如何定义Animation,这对我们使用Animation会有很大的帮助。Animation是以XML格式定义的,定义好的XML文件存放在res\anim中。由于Tween Animation与Frame Animation的定义、使用都有很大的差异,我们将分开介绍,本篇幅中介绍Tween Animation的定义与使用,后续篇幅再详细介绍Frame Animation。按照XML文档的结构【父节点,子节点,属性】来介绍Tween Animation,其由4种类型:
- Alpha:渐变透明度动画效果
- Scale:渐变尺寸伸缩动画效果
- Translate:画面转换位置移动动画效果
- Rotate:画面转换位置移动动画效果
在介绍以上4种类型前,先介绍Tween Animation共同的节点属性,关于节点的命名原则,请阅读AndroidManifest.xml文件结构说明。
表一 | ||
属性[类型] | 功能 | |
Duration[long] | 属性为动画持续时间 | 时间以毫秒为单位 |
fillAfter [boolean] | 当设置为true ,该动画转化在动画结束后被应用 | |
fillBefore[boolean] | 当设置为true ,该动画转化在动画开始前被应用 | |
interpolator | 指定一个动画的插入器 | 有一些常见的插入器 accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 |
repeatCount[int] | 动画的重复次数 | |
RepeatMode[int] | 定义重复的行为 | 1:重新开始 2:plays backward |
startOffset[long] | 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画 | |
zAdjustment[int] | 定义动画的Z Order的改变 | 0:保持Z Order不变 1:保持在最上层 -1:保持在最下层 |
看了以上节点,大家是不是都想开始定义动画了。下面我们就开始结合具体的例子,介绍4种类型各自特有的节点元素。
表二 | ||
XML节点 | 功能说明 | |
alpha | 渐变透明度动画效果 | |
<alpha android:fromAlpha=”0.1″ android:toAlpha=”1.0″ android:duration=”3000″ /> | ||
fromAlpha | 属性为动画起始时透明度 | 0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之间的float数据类型的数字 |
toAlpha | 属性为动画结束时透明度 |
表三 | |||
scale | 渐变尺寸伸缩动画效果 | ||
<scale android:interpolator= “@android:anim/accelerate_decelerate_interpolator” android:fromXScale=”0.0″ android:toXScale=”1.4″ android:fromYScale=”0.0″ android:toYScale=”1.4″ android:pivotX=”50%” android:pivotY=”50%” android:fillAfter=”false” android:startOffset=“700” android:duration=”700″ android:repeatCount=”10″ /> | |||
fromXScale[float] fromYScale[float] | 为动画起始时,X、Y坐标上的伸缩尺寸 | 0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大 | |
toXScale [float] toYScale[float] | 为动画结束时,X、Y坐标上的伸缩尺寸 | ||
pivotX[float] pivotY[float] | 为动画相对于物件的X、Y坐标的开始位置 | 属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置 | |
表四 | |||
translate | 画面转换位置移动动画效果 | ||
<translate android:fromXDelta=”30″ android:toXDelta=”-80″ android:fromYDelta=”30″ android:toYDelta=”300″ android:duration=”2000″ /> | |||
fromXDelta toXDelta | 为动画、结束起始时 X坐标上的位置 | ||
fromYDelta toYDelta | 为动画、结束起始时 Y坐标上的位置 | ||
表五 | |||
rotate | 画面转移旋转动画效果 | ||
<rotate android:interpolator=”@android:anim/accelerate_decelerate_interpolator” android:fromDegrees=”0″ android:toDegrees=”+350″ android:pivotX=”50%” android:pivotY=”50%” android:duration=”3000″ /> | |||
fromDegrees | 为动画起始时物件的角度 | 说明 当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转) | |
toDegrees | 属性为动画结束时物件旋转的角度 可以大于360度 | ||
pivotX pivotY | 为动画相对于物件的X、Y坐标的开始位 | 说明:以上两个属性值 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置 | |
看了上面的例子,想必大家也想看下,这些定义的动画,运行起来是什么样效果,下面运行Scale例子中的动画,界面变化如下:
按照上面的讲述学习完了Tween Animation的定义,对Tween Animation有了详细的了解,再去了解下Android SDK的animation package(android.view.animation),其提供了操作Tween Animation所有的类。
Android SDK提供了基类:Animation,包含大量的set/getXXXX()函数来设置、读取Animation的属性,也就是前面表一中显示的各种属性。Tween Animation由4种类型:alpha、scale、translate、roate,在Android SDK中提供了相应的类,Animation类派生出了AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation分别实现了平移、旋转、改变 Alpha 值等动画,每个子类都在父类的基础上增加了各自独有的属性。再去看下这几个类的构造函数,是不是与我们在表二、表三、表四、表五种定义的属性完全一样。
在了解了Tween Animation的定义,对android.view.animation有了一些基本的认识后,开始介绍Tween Animation如何使用。Android SDK提供了2种方法:直接从XML资源中读取Animation,使用Animation子类的构造函数来初始化Animation对象,第二种方法在看了Android SDK中各个类的说明就知道如何使用了,下面简要说明从XML资源中读取Animation,按照应用程序开发的过程,介绍整个使用的过程,如下:
- 创建Android工程;
- 导入一张图片资源;
- 将res\layout\main.xml中的TextView取代为ImageView;
- 在res下创建新的文件夹anim,并在此文件夹下面定义Animation XML文件;
- 修改OnCreate()中的代码,显示动画资源;
关键代码,解析如下:
//main.xml中的ImageView
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
//加载动画
Animation hyperspaceJumpAnimation =
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
//使用ImageView显示动画
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
工程的源代码提供给大家下载,下载地址,这里简要解析如下:
- AnimationUtils提供了加载动画的函数,除了函数loadAnimation(),其他的到Android SDK中去详细了解吧;
- 所谓的动画,也就是对 view 的内容做一次图形变换;
看了这个长篇幅的介绍,详细大家对Tween Animation的定义、使用都有了比较深入的了解,由于篇幅有限,这里将Android SDK中的内容省略了不少,比如说:Interpolator,需要大家自己去Android SDK中仔细阅读。
转自http://www.moandroid.com/
转载于:https://blog.51cto.com/zensheno/498496
相关文章:

ES6 Rest参数
Rest参数接收函数的多余参数,组成一个数组,放在形参的最后,形式如下: function func(a, b, ...theArgs) { // ... }rest参数只包括那些没有给出名称的参数,注意,rest参数之后不能再有其它参数(即…

Data - 深入浅出学统计 - 下篇
本文是已读书籍的内容摘要,少部分有轻微改动,但不影响原文表达。 :以漫画形式来讲解最基本的统计概念和方法。 ISBN: 9787121299636https://book.douban.com/subject/26906845/2 - 探寻参数 2.1 - 中心极限定理(Central Limit The…

[网摘学习]在Ubuntu上安装和配置OpenStack Nova之二
再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.html此处仅供学习记录,版权归原作者. OpenStack 是 Python 2.6 写的,CentOS 5.6 上默认的是 Python 2.4 的环境…

【Linux】Linux computer文件夹下各种文件的作用
1、bin:放可执行文件,一些Linux的命令 注:Linux的命令最终都是一些程序,这些程序都放在bin目录和sbin目录 2、boot : 启动目录 3、dev : 存放设备 注:在Linux中把所有硬件都叫设备 4、etc: 安装软件的各种…

售前十年,两种人生
售前十年,两种人生,多重感悟! 售前第一年: 你 开始会觉得兴奋、紧张、恐慌。你对客户的提问,会有机械性的反应,试着说服他,但客户的表现总让你很茫然,你总是想把自己装扮的像一个专家,甚至故意打…

点击返回上一页面
οnclick"javascript:window.history.back(-1);" 方法一、以按钮点击的方式实现: <input type"button" name"Submit" value"返回上一页" οnclick"javascript:window.history.back(-1);"> 或者 &l…

【Linux】Linux 简单操作指令之磁盘管理
注:有关Linux全面的命令可以到网站:http://linux.51yip.com/查询 1、pwd : 显示当前所在位置 2、ll : 显示当前目录下的内容 注: (1)如果开头为一个 d 则为一个文件夹 如果开头为 - 则是一个文件 (2)ll后可以跟上一个目录,表示显…

浅说——九讲背包之01背包
所谓九讲,也就是:0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包: [问题描述](经典)有一个吝啬的地主,不愿…

msvcrt.lib和LIBCD.lib链接冲突
今天在移植一个开源代码到windows的VC6工程,编译时出现了这些奇怪的LINK错误。 msvcrt.lib(MSVCRT.dll) : error LNK2005: _toupper already defined in LIBCD.lib(toupper.obj)msvcrt.lib(MSVCRT.dll) : error LNK2005: _tolower already defined in LIBCD.lib(to…
Oracle 小知识点
-- 表create table test (names varchar2(12),dates date,num int,dou double);-- 视图create or replace view vi_test asselect * from test;-- 同义词create or replace synonym aafor dbusrcard001.aa;-- 存储过程create or replace produce dd(v_id in employee.empoy…

CC2540获取本机MAC地址
//获取自身蓝牙地址void GetOwnAddr(void){ static uint8 ownAddress[6] {0}; ownAddress[5] XREG(0x780E); ownAddress[4] XREG(0x780F); ownAddress[3] XREG(0x7810); ownAddress[2] XREG(0x7811); ownAddress[1] XREG(0x7812); ownAddress[0] XREG(0x7813);}转载于:h…

mysql的小练习
建立如下表: 建表语句: class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engineinnodb default charsetutf8;student表创建语句 create table student(-> sid int not null auto_inc…

针对 Windows Phone 7 上的独立存储的 Sterling
http://msdn.microsoft.com/zh-cn/magazine/hh205658.aspx转载于:https://www.cnblogs.com/thankchunzi/archive/2011/11/18/2254416.html

【Linux】Linux简单操作之文件管理
1、mkdir : 创建文件夹 2、rm : 删除文件或目录 注: 凡是涉及到路径,绝对路径相对路径都可以 (1)直接使用 rm 文件名可以删除文件,但删除不了文件夹 (2)删除时会有一行提示 如果…

phpmyadmin另类拿shell
发现了个PHPMYADMIN 结果弱口令登陆进去 爆出绝对路径 然后执行SQL语句发现导出SHELL的时候却发现缺少了import.php这个文件 结果没办法执行MYSQL语句! 然后本地测试了下 发现另外的方法phpMyAdmin/sql.php?dbtest&tablea&printview1&sql_queryselect%…

第二章、IP协议详解
一、IP服务的的特点 IP协议是TCP/IP协议族的动力,他为上层协议提供的无状态无连接,不可靠的服务。 无状态是指IP通信双方不同步传输数据的状态信息,因此所有的ip数据报的发送,传出和接受都是相互独立的,没有上下文的联…

为绑定的NSArrayController设置默认的排序
当NSArrayController与一个class或者entity进行绑定(Binding)之后,可以为这个NSArrayController设置默认的排序。通过在Bindings Insepector中选择Controller Content Parameters -> Sort Descriptor进行默认排序的设定。 1、在.h文件中创…

快速求斯特林数总结(洛谷模板题解)
题目链接 第一类斯特林数行第一类斯特林数列第二类斯特林数行第二类斯特林数列 求一行第一类斯特林数 由第一类斯特林数的推论,\(x^{\overline{n}}\sum_i\begin{bmatrix}n\\i\end{bmatrix}x^i\),分治FFT计算上升幂即可 \(O(nlog^2n)\)。 求一列第一类斯特…

【Linux】Linux简单操作之系统管理
1、date : 显示系统时间 注 :系统操作与所在的文件夹无关,在哪都能操作。 2、su : 切换账号 注: (1)如果高级用户切换低级用户可以直接切换,不用密码 (2)…

嵌入式开发博客收藏
http://hbhuanggang.cublog.cn 嵌入式linux之我行 http://blog.csdn.net/fudan_abc fudan_abc的Linux内核专栏 http://blog.chinaunix.net/space.php?uid20543672

【Python3.6+Django2.0+Xadmin2.0系列教程之一(入门篇-上)】环境搭建及项目创建
由于工作需要,接触了大半年时间的Djangoxadmin框架,一直没空对这块对进行相关的梳理。最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧。 好了,话不多说,下面开始进入正题: 转载请注明出处…

JavaScript深拷贝Json
今天因为项目需要写了个Json格式的深拷贝(深度复制)。很简单,没有做其他的判断,代码如下: function deepCopy(json){if(typeof json number || typeof json string || typeof json boolean){return json;}else if(t…

【Linux】Linux简单操作之压缩解压
一、tar : 归档 格式:tar 参数(必须有) 要被压缩的文件或目录 1、创建归档文件 格式: tar -zvcf 归档文件名 要归档文件列表 注意: (1)z是压缩 v是显示详细信息 c是创建压缩文件…

Firefox 的User Agent 将移除 CPU 架构信息
Mozilla 计划从 Firefox 的 User Agent(用户代理)和几个支持的 API 中移除 CPU 架构信息,以减少 Firefox 用户的“数字指纹”。Web 浏览器会自动向用户在应用程序中打开的网站显示信息,而用户代理会显示有关浏览器和浏览器版本、操…

工程师必读 微软如何部署Exchange2010
一年一度的IT技术盛典——微软TechEd2010大会将于2010年12月1日正式开幕。为了更好地为网友和读者报道今年的大会,我们IT168前方的记者在TechEd会场,为读者带来第一时间的报道。 在今天的大会现场,来自微软的高级顾问陈刘项为我们全面介绍了关…

线程范围内的数据共享
1、如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做。 2、如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,有如下两种方…

Setting the Reply-To Header in an Email using CDONTS.NewMail Object and CDO Message
代码 1 <%2 OptionExplicit3 4 DimobjMail5 DimstrSubject6 DimstrBody7 8 strSubject "This is a test email"9 strBody "This test email is using testdevasp.com "&_10 "as the sender email address but we are "&_11 "…

Codeforces Beta Round #95 (Div. 2) 部分解题报告 (dp,组合数,)
做这样的比赛既考快速编码的能力,还有快速思维的能力。本人很弱,跌了rating。。加油!!!。。 第一题上来就把题意理解错了。。粗心啊。。直接模拟着做就行:1:如果字符串全是大写字母就进行大小写转换:2&…

【Linux】 Linux简单操作之网络通信和网络访问
一、网络通信 1、ifconfig : 查看ip信息 2、ping : 测试网络连通 格式 : ping ip或域名 注: 通过该测试你能知道你的计算机是不是能联网的。 二、网络访问 1、curl : 测试网络访问和模拟用户访问 2、wget &#x…

将类别加入到别人的名称空间内
怎样把自己的类别加入到别人的名称空间内,在引用时,能在别人的名称空间下使用到自己写的类别。 这是一位台湾朋友问及此问题,因此录制一个视频做演示: 视频文件格式:.wmv;大小:9,706KBÿ…