每日一学(九)Android动画---Tween动画的代码实现

       在之前的博客中,我们已经知道了Android动画的分类,并用xml实现了android中的Tween动画:


       android 动画设计概述:  http://blog.csdn.net/u010838555/article/details/73468066

       android 动画---Tween动画的xml实现:http://blog.csdn.net/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 不透明
ScaleAnimation

        

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表示放大
  • 第五个参数:动画在X轴相对于物件位置类型 
  • 第六个参数:动画相对于物件的X坐标的开始位置
  • 第七个参数:动画在Y轴相对于物件位置类型 
  • 第八个参数:动画相对于物件的Y坐标的开始位置
    • 0.0f,0.0f 在左上角
      0.0f,1.0f 在左下角
      1.0f,1.0f 在右下角
      0.5f,0.5f 在中间
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坐标的开始位置

通用方法

  1. setDuration(long durationMills)
    设置动画持续时间(单位:毫秒)
  2. setFillAfter(Boolean fillAfter)
    如果fillAfter的值为true,则动画执行后,控件将停留在执行结束的状态
  3. setFillBefore(Boolean fillBefore)
    如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态
  4. setStartOffSet(long startOffSet)
    设置动画执行之前的等待时间
  5. 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);

  
虽然可以通过代码的方式定义动画,但是Android官方还是建议在xml中定义动画效果,这样可做到最大程度上的解耦,方便项目的后期维护。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值