Android特效开发(可伸缩View带互相挤压效果)进阶篇
本文由manymore13原创,转载请标明出处http://blog.csdn.net/manymore13/article/details/12907969
上一篇 Android特效开发(可伸缩View带互相挤压效果 )初级篇
在上一篇文章末尾我提出了三点不足 ,遂本篇主要是为了解决上篇的不足之处。
对于上一篇的不足之处 有三点 :
1. 特效动画死板,变化速度死板;
2. 特效动画不能设置动画时间,如遇到高分辨率的机型,动画时间会变长。
3. view只能水平伸缩,不能竖直伸缩。
对于第一点不足之处变化速度死板,我立马想到了Android中Interpolator类,对于做过Android中动画的同学
来说,这个类应该并不陌生,该类可以改变动画的变化速率,它的直接子类中有
BounceInterpolator 弹球效果
AccelerateInterpolator 加速
LinearInterpolator 匀速
更多子类可请查阅Android开发文档
它有个getInterpolation (float input) 方法,你可以传入动画消逝时间值(input范围 [0,1] ),0代表开始,1代表
结束,获取变化速率。等会儿代码中有用到这个类。
有关插值器可参考: android动画(一)Interpolator
对于第一二三点不足,我写了辅助类StretchAnimation可以解决。欢迎批评指正。
StretchAnimation只负责view水平拉伸或者垂直拉伸。你可以设置动画的时间,你可以设置它的插值器,改变动
画的效果。下面该类的实现过程。
不同插值器运行效果不一样,上面是垂直动画效果
下面我们只需简单的三步就可以实现水平效果
1. measureSize(screentWidth);你可以设置屏幕宽度,例如上面我这个大小设置的是屏幕的高度,所以四个按钮就占屏幕的高度。
2. StretchAnimation实例化时修改 StretchAnimation.TYPE.horizontal 水平效果
3. 修改XML布局Linearlayout属性 android:orientation="horizontal" 水平
修改后的水平动画效果:
本篇相对于上一篇来说算是加强版 。水平伸缩动画和垂直伸缩动画可轻松转换,相对于上一篇增加对动画的控制
功能。可以控制动画时间,而动画时间不会因分辨率的增加而改变;通过改变动画的速率可实现不同的动画效果,弹
球效果,加速,匀速效果等等。
对上述代码稍作修改就可以实现如下效果,这种效果用到插值器 AccelerateDecelerateInterpolator