Android动画学习总结---上

国庆长假,出去溜达了一圈人满为患,发现还是回来敲代码最实在。
临近毕业之际, 总结了一年多来学习Android的知识体系,发现Android动画这
一块还是我的软肋。 所以决定国庆这几天花点时间来学学Android动画,由于本人
是新手以下所写内容仅仅是我个人笔记,如有错漏,望见谅!

Android动画总共可以分为两大类
分别是 Property AnimationView Animation,而View Animation又细化分
为Tweened Animation(补间动画)和Frame Animation(逐帧动画)
它们的思维导图如下所示。

第一大类View Animation视图动画
     Tweened Animation(补间动画)
     开发者给定两个关键帧数据()让系统在两帧之间实现动画的渐变效果。
     例如我们想实现一个动画透明渐变的效果,我们用0表示完全透明,1表示 完全不透明
     那么在0~1(可以从0.1,0.2,0.3.....计算)这段数值就交由系统去计算拉。最终形成一个透明的渐变效果。
     
     涉及到的类和接口介绍
     AnimationSet:用来存储一组动画组合,它的构造函数如下所示

 

第一个构造方法,一般很少用。
     现在主要讲第二个构造方法,实例化此方法需要传入一个布尔值,如果传入true那么就回告诉系统在播放动画的过程中,
使用系统已经定义的好Interpolator来定义动画的播放速率。如果传入false则表示使用自己自定义的Interpolator。Api文档如下所示。

Interpolator:插入值,这是一个接口,其实现子类用来描述动画播放的速率。(关于自定义Interpolator的用法,我有空的时候会补上的^_^)
    它的实现子类如下所示(此数据参考自互联网)
     AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速
     AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
     AnticipateInterpolator 开始的时候向后然后向前甩
     AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
     BounceInterpolator 动画结束的时候弹起
     CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
     DecelerateInterpolator 在动画开始的地方快然后慢
     LinearInterpolator 以常量速率改变
     OvershootInterpolator 向前甩一定值后再回到原来位置
    
     RotateAnimation:(旋转动画)这是一个控制对象(试图)在x,y平面内旋转的动画。
     共有四个构造方法。


其参数说明
 fromDegrees:旋转偏移的开始角度
 toDegrees:旋转偏移的结束角度
 pivotXType:指定X轴的旋转模式,可以取值Animation.ABSOLUTE(直接以屏幕为像素单位),
 Animation.RELATIVE_TO_SELF(以自身为参照物),Animation.RELATIVE_TO_PARENT(相对于父容器)。
 pivotXValue:指定旋转中心距离父容器左顶点的X距离
 pivotYType:指定Y轴的旋转模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
 pivotYValue:指定旋转中心距离父容器上顶点的Y距离

 

AlphaAnimation:(透明动画)
     共有两个构造方法

 

其参数说明
          fromAlpha:开始的透明度(1表示完成不透明,0表示完全透明)
          toAlpha: 结束的透明度

ScaleAnimation:(缩放动画)
     共有四个构造方法。

其参数说明
      fromX: 动画起始时 X坐标上的伸缩尺寸   
      toX: 动画结束时 X坐标上的伸缩尺寸   
      fromY: 动画起始时Y坐标上的伸缩尺寸    
      toY: 动画结束时Y坐标上的伸缩尺寸   
      pivotXType: 指定X轴的伸缩模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
      pivotXValue: 动画相对于物件的X坐标的开始位置  
      pivotYType: 指定Y轴的伸缩模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
      pivotYValue: 动画相对于物件的Y坐标的开始位置 

TranslateAnimation:(平移动画)
     共有三个构造方法。除了第一个之外,这个动画类的另外两个参数稍微有点区别。



第二个方法其参数说明
                 fromXDelta: 动画起始时 X坐标上的移动位置
          toXDelta: 动画结束时 X坐标上的移动位置
          fromYDelta: 动画起始时Y坐标上的移动位置
          toYDelta: 动画结束时Y坐标上的移动位置                

第三个方法其参数说明
          fromXYype: 指定X轴的平移模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
          fromXValue:X平移起始值
          toXType: 指定X轴的 平移 模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
          toXValue:X平移结束值
          fromYType: 指定Y轴的 平移 模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
          fromTValue:Y平移起始值
          toYType: 指定Y轴的 平移 模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
          toYValue:Y平移结束值



AnimationUtils:(动画工具类)主要用来加载动画的资源文件,值得注意的是,这个
     类里面的所有方法都是静态方法,因此在使用的时候不必new了,直接就是AnimationUtils.方法名,
     就OK了。
     它的所有方法如下

 
接下来使用编码的方式演示动画
     使用步骤
     第一步,获取动画集合对象即AnimationSet(必须)
     第二步,设置动画的变化速率(不必须)
     第三步,设置动画类型,可以旋转,透明,缩放等(必须)
     第四步,将动画类型添加到第一步AnimationSet的集合中
     第五步,开始执行动画,View.startAnimation(AnimationSet)

     透明动画,AlphaAnimation(1,0)
//AnimationSet设置为true表示使用系统自带的方法来计算变化速率
AnimationSet animationSet = new AnimationSet(true);
//表示动画,开始和结束的时候慢速,中间段加速
Interpolator interpolator = new AccelerateDecelerateInterpolator();
//设置动画Interpolator(变化的快慢)
animationSet.setInterpolator(interpolator);

AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
//设置动画变化的持续时间
alphaAnimation.setDuration(5000);
animationSet.addAnimation(alphaAnimation);
imageView.startAnimation(animationSet);
动画效果如下所示


旋转动画
AnimationSet animationSet1 = new AnimationSet(true);
//表示动画,先慢速后加速变化
Interpolator interpolator1 = new AccelerateInterpolator();
animationSet1.setInterpolator(interpolator1);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF, 0.5F);
//设置动画变化的持续时间
rotateAnimation.setDuration(5000);
animationSet1.addAnimation(rotateAnimation);
imageView.startAnimation(animationSet1);

动画效果如下所示   



缩放动画

AnimationSet animationSet2 = new AnimationSet(true);
//表示动画,变化速度按正弦曲线改变,数值5表示,动画按循环播放5次
Interpolator interpolator2 = new CycleInterpolator(5);
animationSet2.setInterpolator(interpolator2);
ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1f, 0, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5F);
//设置动画变化的持续时间
scaleAnimation.setDuration(5000);
animationSet2.addAnimation(scaleAnimation);
imageView.startAnimation(animationSet2);
动画效果如下所示   

平移动画

//AnimationSet设置为true表示使用系统自带的方法来计算变化速率
AnimationSet animationSet3 = new AnimationSet(true);
//表示动画,开始的时候加速,后面减速
Interpolator interpolator3 = new DecelerateInterpolator();
animationSet3.setInterpolator(interpolator3);
TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0F, Animation.RELATIVE_TO_SELF, 0F, Animation.RELATIVE_TO_SELF, 3F, Animation.RELATIVE_TO_SELF, 0f);
//设置动画变化的持续时间
translateAnimation.setDuration(5000);
animationSet3.addAnimation(translateAnimation);
imageView.startAnimation(animationSet3);
动画效果如下所示


透明,旋转,缩放,平移四个动画综合运用

AnimationSet animationSet4 = new AnimationSet(true);
//动画,回弹变化
Interpolator interpolator4 = new BounceInterpolator();
animationSet4.setInterpolator(interpolator4);

//透明动画
alphaAnimation = new AlphaAnimation(1, 0);
//旋转动画
rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF, 0.5F);
//缩放动画
scaleAnimation = new ScaleAnimation(0, 1f, 0, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5F);
//平移动画
translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0F, Animation.RELATIVE_TO_SELF, 0F, Animation.RELATIVE_TO_SELF, 3F, Animation.RELATIVE_TO_SELF, 0f);

animationSet4.addAnimation(alphaAnimation);
animationSet4.addAnimation(rotateAnimation);
animationSet4.addAnimation(scaleAnimation);
animationSet4.addAnimation(translateAnimation);
//设置动画变化的持续时间
animationSet4.setDuration(5000);

imageView.startAnimation(animationSet4);
动画效果如下所示    


以下再用xml资源文件的形式演示动画
        第一步,记得在res目录文件下(如果你没有这个文件夹的话),创建一个以anim命名的文件夹,如图所示

第二步,创建动画资源文件,并将其命名为scale_animation.xml,各项属性的含义已经介绍过,我就不讲了 (*^-^*)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:duration="5000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.5"
        android:toYScale="1.5" />

</set>


第三步,使用AnimationUtils加载动画,也就两行代码的事。简单、快捷。

//加载xml动画文件
Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale_animation);
//开始动画
imageView.startAnimation(animation);

动画效果如下所示


完整代码请戳这里Android动画Demo


至此,整个Tweened Animation的基本用法和各项参数说明已经基本讲完,由于篇幅的关系,剩下的Frame Animation和Property Animation我将放在下一
遍博客再总结,如果您还有兴趣请期待我的下一篇博客 Android动画学习总结---中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值