预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

前言 感谢你阅读本文,我坚信读完本文肯定不会让你失望的。想要做动画牛人?想要精通动画?那么本文所讲的内容都是你必须要掌握的。关于动画,我已经写了两篇博文,但是还是没有将动画描述全面,于是我写了本文,另外,我后面还会再写一篇属性动画的HYPERLINK"http://www.2cto.com/ym"\t"_blank"源码分析,通过这四篇博文,你将真正地成为动画牛人。 HYPERLINK"http://www.2cto.com/kf/yidong/Android/"\t"_blank"Android动画系列: android动画简介 Android动画进阶—使用开源动画库nineoldandroids Android属性动画深入分析:让你成为动画牛人 Android源码分析—属性动画的工作原理 我为什么要写这篇博文? 是分享精神,我对动画从了解到熟悉是经历了一个过程,而这一个过程是要花费时间的,也许是几天,也许是几个小时,总之没有至少若干小时的时间投入,你是无法熟悉动画的全部的。我花了大量时间来弄懂动画的整个逻辑,深知其中的辛苦,所以,我不想大家再像我这样,我想大家能够更快地熟悉并精通动画。通过本文,你将会深入了解Android动画并且从此没有动画再能难得了你。确切来说本文是深入分析属性动画,因为View动画和帧动画的功能有限也比较简单,没有太多值得分析的东西。 开篇 像设计模式一样,我们也提出一个问题来引出我们的内容。 问题: 给Button加一个动画,让这个Button的宽度从当前宽度增加到500px。 也许你会说,这很简单,用渐变动画就可以搞定,我们可以来试试,你能写出来吗?很快你就会恍然大悟,原来渐变动画根本不支持对宽度进行动画啊,没错,渐变动画只支持四种类型:平移(Translate)、旋转(Rotate)、缩放(Scale)、不透明度(Alpha)。当然你用x方向缩放(scaleX)可以让Button在x方向放大,看起来好像是宽度增加了,实际上不是,只是Button被放大了而已,而且由于只在x方向被放大,这个时候Button的背景以及上面的文本都被拉伸了,甚至有可能Button会超出屏幕。下面是效果图 上述效果显然是很差的,而且也不是真正地对宽度做动画,不过,所幸我们还有属性动画,我们用属性动画试试 看demo HYPERLINK"http://www.2cto.com/kf/201401/270169.html"? 1 2 3 4 5 6 7 8 9 10privatevoidperformAnimate(){ ObjectAnimator.ofInt(mButton,width,500).setDuration(5000).start(); } @Override publicvoidonClick(Viewv){ if(v==mButton){ performAnimate(); } }上述代码运行一下发现没效果,其实没效果是对的,如果你随便传递一个属性过去,轻则没动画效果,重则程序直接Crash。 下面分析下属性动画的原理: 属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据你传递的该熟悉的初始值和最终值,以动画的效果多次去调用set方法,每次传递给set方法的值都不一样,确切来说是随着时间的推移,所传递的值越来越接近最终值。总结一下,你对object的属性xxx做动画,如果想让动画生效,要同时满足两个条件: 1.object必须要提供setXxx方法,如果动画的时候没有传递初始值,那么还要提供getXxx方法,因为HYPERLINK"http://www.2cto.com/os/"\t"_blank"系统要去拿xxx属性的初始值(如果这条不满足,程序直接Crash) 2.object的setXxx对属性xxx所做的改变必须能够通过某种方法反映出来,比如会带来ui的改变啥的(如果这条不满足,动画无效果但不会Crash) 以上条件缺一不可 那么为什么我们对Button的width属性做动画没有效果?这是因为Button内部虽然提供了getWidth和setWidth方法,但是这个setWidth方法并不是改变视图的大小,它是TextView新添加的方法,View是没有这个setWidth方法的,由于Button继承了TextView,所以Button也就有了setWidth方法。下面看一下这个getWidth和setWidth方法的源码: HYPERLINK"http://www.2cto.com/kf/201401/270169.html"? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22