在之前的博客中,我们已经知道了Android动画的分类,并用xml实现了android中的Tween动画:
android 动画设计概述: http://blog.youkuaiyun.com/u010838555/article/details/73468066
android 动画---Tween动画的xml实现:http://blog.youkuaiyun.com/u010838555/article/details/73469811
这里我们记录一下Tween动画的代码实现。
Tween动画的分类:alpha(渐变)、scale(缩放)、translate(位移)、rotate(旋转),这四种动画都有从Animation继承过来的公共的方法,又拥有其独特的方法。其实针对我们在xml中的配置,在Android中都有与其对应的方法。首先来看看与这四种动画所对应的类:
xml根标签 | 对应类 | 动画类型 |
---|---|---|
alpha | AlphaAnimation | 渐变透明度动画 |
scale | ScaleAnimation | 渐变缩放动画 |
translate | TranslateAnimation | 渐变位置移动动画效果 |
roate | RotateAnimation | 渐变旋转动画效果 |
首先来看下它们的共有方法,也就是从Animation类继承的方法:
xml属性 | 对应的方法 | 说明 |
---|---|---|
android:duration | setDuration(long) | 动画执行时间 |
android:fillEnabled | setFillEnabled(boolean) | 与fillBefore结合使用 |
android:fillBefore | setFillBefore(boolean) | 动画结束后是否停留在初始状态 |
android:fillAfter | setFillAfter(boolean) | 动画结束后是否停留在最后状态 |
android:repeatMode | setRepeatMode(int) | 动画重复的类型 |
android:repeatCount | setRepeatCount(int) | 动画重复的次数 |
android:interpolator | setInterpolator(Interpolator) | 动画插值器 |
根据以上对应关系及上篇博客中的属性介绍,我们可以很灵活的在代码中设置我们想要的效果
AlphaAnimation
AlphaAnimation alphaAnimation=new AlphaAnimation(0,1);
alphaAnimation.setDuration(3000);
alphaAnimation.setRepeatCount(2);
alphaAnimation.setFillAfter(true);
ivImage.setAnimation(alphaAnimation);
- 第一个参数:起始透明度。
- 第二个参数:结束透明度。
- 0.0f 全透明
1.0f 不透明
- 0.0f 全透明
ScaleAnimation scaleAnimation=new ScaleAnimation(0.0f,1.0f,0.0f,1.0f,
ScaleAnimation.RELATIVE_TO_SELF,1.0f,ScaleAnimation.RELATIVE_TO_SELF,0.0f);
scaleAnimation.setDuration(1000);
imageView.startAnimation(scaleAnimation);
- 第一个参数:起始时 X坐标上的伸缩尺寸。
- 第二个参数:结束时 X坐标上的伸缩尺寸。
- 第三个参数:起始时 Y坐标上的伸缩尺寸。
- 第四个参数:结束时 Y坐标上的伸缩尺寸。
- 0.0f表示收缩到没有
1.0f表示正常无伸缩
值小于1.0f表示收缩
值大于1.0f表示放大
- 0.0f表示收缩到没有
- 第五个参数:动画在X轴相对于物件位置类型 。
- 第六个参数:动画相对于物件的X坐标的开始位置。
- 第七个参数:动画在Y轴相对于物件位置类型 。
- 第八个参数:动画相对于物件的Y坐标的开始位置。
- 0.0f,0.0f 在左上角
0.0f,1.0f 在左下角
1.0f,1.0f 在右下角
0.5f,0.5f 在中间
- 0.0f,0.0f 在左上角
TranslateAnimation
TranslateAnimation translateAnimation=new TranslateAnimation(0,100,0,100);
translateAnimation.setDuration(1000);
translateAnimation.setInterpolator(this, android.R.anim.cycle_interpolator);
translateAnimation.setFillAfter(true);
imageView.startAnimation(translateAnimation);
- 第一个参数:动画起始时 X坐标上的移动位置。
- 第二个参数:动画结束时 X坐标上的移动位置 。
- 第三个参数:动画起始时 Y坐标上的移动位置 。
- 第四个参数:动画结束时 Y坐标上的移动位置。
RotateAnimation
RotateAnimation rotateAnimation=new RotateAnimation(0.0f,360.0f,
Animation.RELATIVE_TO_SELF,0.0f,Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(3000);
rotateAnimation.setFillAfter(true);
imageView.startAnimation(rotateAnimation);
- 第一个参数:动画起始时的旋转角度
- 第二个参数:动画旋转到的角度
- 第三个参数:动画在X轴相对于物件位置类型
- 第四个参数:动画相对于物件的X坐标的开始位置
- 第五个参数:动画在Y轴相对于物件位置类型
- 第六个参数:动画相对于物件的Y坐标的开始位置
通用方法
- setDuration(long durationMills)
设置动画持续时间(单位:毫秒) - setFillAfter(Boolean fillAfter)
如果fillAfter的值为true,则动画执行后,控件将停留在执行结束的状态 - setFillBefore(Boolean fillBefore)
如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态 - setStartOffSet(long startOffSet)
设置动画执行之前的等待时间 - setRepeatCount(int repeatCount)
设置动画重复执行的次数
AnimationSet 实现多种动画混合效果可
可同时播放,也可以给不同动画分别设置 setStartOffset() 开始偏移来顺序播放。
AnimationSet animationSet=new AnimationSet(true);
AlphaAnimation alphaAnimation=AnimationUtils.loadAnimation(this, R.anim.alpha);
ScaleAnimation scaleAnimation=AnimationUtils.loadAnimation(this, R.anim.scale);
TranslateAnimation translateAnimation=new TranslateAnimation(0,100,0,100);
RotateAnimation rotateAnimation=new RotateAnimation(0.0f,360.0f,
Animation.RELATIVE_TO_SELF,0.0f,Animation.RELATIVE_TO_SELF, 0.5f);
alphaAnimation.setStartOffset(0);
scaleAnimation.setStartOffset(2000);
translateAnimation.setStartOffset(4000);
rotateAnimation.setStartOffset(6000);
animationSet.addAnimation(translateAnimation);
animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(scaleAnimation);
animationSet.setInterpolator(this, android.R.anim.anticipate_interpolator);
animationSet.setDuration(2000);
imageView.startAnimation(animationSet);