APIDemo学习笔记——Android上几种简单的Animation使用方法(二)

现在开始看第三个Push,从View->animation->Push可以启动这个Activity

Push这个Demo主要是展示了View之间的切换效果。

Push对应的Java文件为view包内的Animation2.java,对应的XML布局文件为layout/animation_2.xml。

先看布局文件,这个页面内最主要用到的是一个ViewFlipper。使用ViewFlipper可以实现多个View之间的动态切换,并且可以自定义切换动画,本例中所展示的就是如何定义切换动画。

下面只挑重点语句来讲了。

 

让ViewFlipper开始自动切换。

[java]  view plain copy
  1. mFlipper.startFlipping();  
 

当点击时Spinner内的选项时,更改进入和退出的动画效果。

  1. public void onItemSelected(AdapterView parent, View v, int position, long id) {  
  2.         switch (position) {  
  3.         case 0:  
  4.             mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  5.                     R.anim.push_up_in));  
  6.             mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  7.                     R.anim.push_up_out));  
  8.             break;  
  9.         case 1:  
  10.             mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  11.                     R.anim.push_left_in));  
  12.             mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  13.                     R.anim.push_left_out));  
  14.             break;  
  15.         case 2:  
  16.             mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  17.                     android.R.anim.fade_in));  
  18.             mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  19.                     android.R.anim.fade_out));  
  20.             break;  
  21.         default:  
  22.             mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  23.                     R.anim.hyperspace_in));  
  24.             mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  25.                     R.anim.hyperspace_out));  
  26.             break;  
  27.         }  
  28.     }  

这里的Animation都是自定义的动画效果,可以在res/anim内找到对应的XML文件,下面用push_up_in.xml来说明定义的大概用法。

因为这个动画是由几个动画复合组成的,所以外围就用一个set标签括起来,组成一个AnimationSet。

translate标签内主要定义位置的变化情况,fromYDelta="100%p",是指从ViewFlipper的正下方刚好一个View的高度的距离的地方开始出现,100%p是一个相对值,大于0为下方,小于0为上方。toYDelta="0",是指刚好达到布局文件的原始位置停止。android:duration="300",是指整个动作的时间用时为300毫秒,系统会根据这个时间自动调整速度。

alpha标签内定义的是透明度,0为全透明,1.0为不透明,过程为300毫秒,让View为逐渐出现的过程

[xhtml]  view plain copy
  1. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  2.     <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="300"/>  
  3.     <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />  
  4. </set>  
 

push_up_out.xml,和push_left的两个标签都几乎一样的,应该很好理解。

hyperspace_in.xml更简单,只有一个alpha,所以外层没有set标签。startOffset是设置延迟。

 

hyperspace_out.xml相对复杂一点,set里面还包括有set,但仍然是由几个小动作一起组成的,可以一点点拆成来理解。

最外层是一个set,里面嵌套一个scale和一个set。

第一个scale标签可以理解为,以当前View的正中间位置为轴点,在700毫秒时间内,以加速放大的方式,将View的横长变为1.4倍,高度变为0.6倍。至于fillAfter这个标签我一直搞不懂这个功能,照SDK里的解释,是在连续动画中让View保持在动画的最后一帧,但照我的实验似乎没有什么效果,这个求高手指教。(查网上一些资料是说必须在代码里设置,这个是不是属于Android的Bug?)一个animationSet可以做为另一个animationSet的子集,这个很容易理解。rotate标签内的照字面意思应该很容易理解了,不再赘述了。

[xhtml]  view plain copy
  1. <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false">  
  2.     <scale   
  3.         android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
  4.         android:fromXScale="1.0"   
  5.         android:toXScale="1.4"   
  6.         android:fromYScale="1.0"   
  7.         android:toYScale="0.6"   
  8.         android:pivotX="50%"  
  9.         android:pivotY="50%"  
  10.         android:fillAfter="false"  
  11.         android:duration="700" />  
  12.     <set   
  13.         android:interpolator="@android:anim/accelerate_interpolator"  
  14.                 android:startOffset="700">  
  15.           
  16.         <scale  
  17.             android:fromXScale="1.4"   
  18.             android:toXScale="0.0"  
  19.                 android:fromYScale="0.6"  
  20.             android:toYScale="0.0"   
  21.             android:pivotX="50%"   
  22.             android:pivotY="50%"   
  23.             android:duration="400" />  
  24.           
  25.         <rotate   
  26.             android:fromDegrees="0"   
  27.             android:toDegrees="-45"  
  28.             android:toYScale="0.0"   
  29.             android:pivotX="50%"   
  30.             android:pivotY="50%"  
  31.             android:duration="400" />  
  32.     </set>  
  33. </set>  
 

 

很多动画其实都是通过alpha, scale, rotate, translate这几个基本动作组成的。这些都属于Tween Animation。另外还有一种Frame Animation,类似放电影的效果,一帧帧播放动画,以后再说。

所有在XML内的设置的属性都可以在JAVA里找到对应的API函数,在Android SDK文档里可以查得到。

其实我觉得我这样写得都有点啰嗦了,Android的API的名字定义都很规范,从名字都已经可以判断出这个函数的功能了,下次不再写这么详细了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值