最近两天学了android 动画方面的知识,从一点不懂到自己研究确实有收获。
Animation 分为:
<alpha /> | 透明度渐变 |
<scale /> | 尺寸渐变 |
<translate /> | 位移动画 |
<rotate /> | 旋转动画 |
在XML 和在JavaCode中都可以定义,方法分别为
XML中 | javaCode中 |
<alpha /> | AlphAnimation |
<scale /> | ScaleAnimation |
<translate /> | TranslateAnimation |
<rotate /> | RotateAnimation |
在动画中,出现任何和坐标有关的数值,都是以刚开始动画的位置为参照位置画X、Y轴,如图:
最外面绿框代表手机屏幕;
小黄人所处位置为定义位置,所以就以这个位置为参照位置,即原点;
然后按箭头所指方向为X、Y轴正方向区分正负,即:上为负,下为正,左为负,右为正。
接下来分别解释
XML中:
(1)Alpha 透明度渐变动画
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android"> 3 <alpha 4 android:duration="2000" 5 android:fromAlpha="0" 6 android:toAlpha="1.0" 7 /> 8 9 </set> 在每种动画的开头都要以这种动画的<alpha />开头和结尾,如上代码;其中的 fromAlpha : 开始透明度; toAlpha : 最终透明度;透明度:0是完全透明, 1是完全不透明, 从0.0~1.0用float字符型式来表示透明度;duratiion: 动画完成时间(在多少ms内完成动画);startOffset: 延迟一定时间后运行动画;
(2)Scale 尺寸渐变动画
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android"> 3 <scale 4 android:duration="2000" 5 android:fromXScale="0.1" 6 android:toXScale="1.0" 7 android:fromYScale="0.1" 8 android:toYScale="1.0" 9 android:pivotY="50" 10 android:pivotX="50" 11 /> 12 13 </set> fromXScale : 动画 起始时 X坐标上的伸缩尺寸 toXScale : 动画 结束时 X坐标上的伸缩尺寸 fromYScale : 动画 起始时 Y坐标上的伸缩尺寸 toYScale : 动画 结束时 Y坐标上的伸缩尺寸 以上四个属性都是浮点值类型: 0.0代表尺寸为零 0.0~1.0之间代表小尺寸(缩小原画) 1.0代表原尺寸无缩放 >1.0代表大尺寸(放大原画) pivotX 属性为动画相对于物件的X坐标的开始位置 pivotY 属性为动画相对于物件的Y坐标的开始位置 以上两个属性值 从0%-100%中取值;50%为物件的X或Y方向坐标上的中点位置; duratiion: 动画完成时间(在多少ms内完成动画); startOffset: 延迟一定时间后运行动画;
(3)Translate 位移动画
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android"> 3 <translate 4 android:duration="2000" 5 android:fromYDelta="30" 6 android:fromXDelta="30" 7 android:toXDelta="-30" 8 android:toYDelta="-30" 9 /> 10 11 </set> fromXDelta:动画开始时X坐标;toXDelta : 动画结束时X坐标;fromXDelta:动画开始时Y坐标;toYDelta : 动画结束时Y坐标;
duratiion: 动画完成时间(在多少ms内完成动画);startOffset: 延迟一定时间后运行动画;
(4)Rotate 旋转动画
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android"> 3 <rotate 4 android:duration="2000" 5 android:fromDegrees="0" 6 android:toDegrees="360" 7 android:pivotX="50" 8 android:pivotY="50" 9 /> 10 11 </set> formDegreea: 动画开始角度; toDegreea : 动画结束时角度,可以大于360°;(大于360°就是能多旋转几圈,可以自己试一下);
当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转)
pivotX,pivotY: 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置; duratiion: 动画完成时间(在多少ms内完成动画); startOffset: 延迟一定时间后运行动画;
一些效果:
@android:anim/accelerate_interpolator: 越来越快
@android:anim/decelerate_interpolator:越来越慢
@android:anim/accelerate_decelerate_interpolator:先快后慢
@android:anim/anticipate_interpolator: 先后退一小步然后向前加速
@android:anim/overshoot_interpolator:快速到达终点超出一小步然后回到终点
@android:anim/anticipate_overshoot_interpolator:到达终点超出一小步然后回到终点
@android:anim/bounce_interpolator:到达终点产生弹球效果,弹几下回到终点
@android:anim/linear_interpolator:均匀速度。
不过我试过之后发现,在XML中写是没有起到实际作用的,要在JavaCode中调用才能显现出效果:
要在JavaCode中加入这种代码才能起到作用,可以自己试一下:myAnimation.setInterpolator(new BounceInterpolator()); //弹球效果; 自己学会了基础的就可以深入的研究一下下,比如我发现这样子会更好看哦:
1 <scale 2 android:duration="2000" 3 android:fromYScale="0dp" 4 android:toYScale="1.0" 5 android:fromXScale="0" 6 android:toXScale="1.0" 7 android:pivotY="50" 8 android:pivotX="50" 9 /> 10 11 <translate 12 android:duration="2000" 13 android:fromYDelta="20%p" 14 android:toYDelta="0" 15 /> 把尺寸缩放和位移加起来之后,再在JavaCode中调用弹球效果,出来的画面果然更加好看哈哈哈(无心之举);不过还是没有试出来连续动画,和逐帧播放不一样的那种,继续努力然后补充吧~
2016-08-16 22:41:12