Android 动画分析

作者: ScottStone | 来源:发表于2018-11-01 16:15 被阅读52次

    Android的动画可以分为三种:View动画、帧动画和属性动画,其实帧动画也属于View动画的一种,只不过它和平移、旋转等常见的View动画在表现形式上略有不同而已。

    1. View动画

             View动画的作用对象时View,支持4种动画效果:平移动画、缩放动画、旋转动画和透明度动画。其实帧动画也属于View动画,但是帧动画的表现形式跟上面的四种变化效果不太一样。下面我们介绍的View动画不特殊说明均指上面的四种变换。

    1.1View动画的种类

            View动画的四种变换对应着Animation的四个子类:TranslateAnimation、ScaleAnimation、RotateAnimation和AlphaAnimation。这四种动画既可以通过XML来定义也可以通过代码来动态的创建。

    四种View动画

            我们先用XML创建View动画:

    View 动画XML

            从上面可以看出,View动画可以是单个动画也可以是组合的。<set>标签表示动画的集合,对应的是AnimationSet类,它可以包含多个动画,内部可以嵌套。 

    android:interpolator:表示动画集合采用的插值器,插值器影响动画的速度,比如匀速非匀速等,默认为加减速插值器如上图所示@android:anim/accelerate_decelerate_interpolator。

    android:shareInterpolator:表示集合中的动画和集合共享同一个插值器,如果集合不指定插值器,那么自动化需要单独指定所需的插值器或使用默认。

    <translate />表示平移动画,android:fromXDelta="1" 表示开始的X轴位置,android:toXDelta="2"表示结束的X轴位置;android:fromYDelta="1",android:toYDelta="2"表示Y轴。

    <scale />表示缩放动画,android:fromXScale="1dp"android:toXScale="2dp",表示X轴缩放的开始结束值,android:fromYScale="1dp"android:toYScale="2dp"表示Y轴,android:pivotX="1"android:pivotY="1"表示的轴点的位置。一般取View的中心点,具体的根据动画的实际需求。

    <rotate /> 表示旋转动画,android:fromDegrees="0"android:toDegrees="180",表示旋转开始的跟结束的角度,android:pivotX="1"android:pivotY="1"表示轴点的位置,具体位置根据动画的实际需求。

    <alpha />表示透明度动画    android:fromAlpha="1"  android:toAlpha="0.1" ,表示透明度开始与结束值。1表示不透明。

    除了上面介绍的一些属性,还有一些常用的属性:

    android:duration="10"  表示动画的时间,

    android:fillAfter="false" 表示动画结束View是否停留在动画结束的位置。

    android:fillBefore="false"表示动画开始View是否停留在动画开始的位置。

    View动画的使用:

    View动画的用法如下图,view_animation即为在anim目录下创建的动画XML文件。

    View动画的简单用法

    1.2自定义动画

    下面我们做一个3D旋转的效果,继承Animation抽象类,重写initialize初始化参数,重写applyTransformation方法进行矩阵变换即可,如下图:

    自定义3D旋转动画

    1.3帧动画

    帧动画其实比较简单,类似于播放连续的图片,帧动画需要AnimationDrawable来实现。

    帧动画

    帧动画的使用:

    帧动画的使用

    2 View动画的特殊使用场景

    2.1 LayoutAnimation

    LayoutAnimation用在ViewGroup上,为ViewGroup指定一个动画,其子元素出场是都会有动画,一般ListView上用的比较多。LayoutAnimation也是一个View动画。

    (1)定义LayoutAnimation:

    LayoutAnimation

    android:animation="@anim/animation_item" 指定子元素动画

    android:animationOrder="normal" 子元素动画顺序

    android:delay="0.5" 动画延时,以子元素动画时间为标准,及子元素500ms,0.5表示延时150ms

    (2)定义子元素动画:

    子View动画

    (3)为ViewGroup指定动画:

    ListView 指定动画

    LayoutAnimation的使用,下图也给出了不使用用XML方式给ViewGroup指定动画:

    LayoutAnimation的使用

    NOTE:项目上传到了github:https://github.com/siling1990/AIDLDemo.git

    相关文章

      网友评论

        本文标题:Android 动画分析

        本文链接:https://www.haomeiwen.com/subject/pnbczftx.html