美文网首页项目
Android补间动画

Android补间动画

作者: shenlong77 | 来源:发表于2017-05-22 17:35 被阅读37次

    android中补间动画分为透明动画,旋转动画,缩放动画和位移移动,动画可以作用在所有的view上,动画可以单独使用,也可以多个动画一起使用。

    重要写在前面

    android动画中所有涉及到坐标的地方,坐标原点都是view的左上角。

    补间动画只能在视觉上改变view的状态,但是view实际上还是以原来的大小在原来的位置上。例如把一个view从左上角移动到了右下角,那个这个view其实还在左上角,只是在视觉上移动到了右下角,如果view上有点击事件,那么只有点左上角那个位置才能触发点击事件,点右下角不会有任何反应。

    一 用代码的方式写补间动画
    所有动画的公共属性

    这里列出所有动画都有的方法,包括四种动画以及AnimationSet,这些动画的合集

    //设置动画的持续时间
    alphaAnimation.setDuration(2000);
     //设置动画播放完毕后是否保持在动画播放完毕的状态
    alphaAnimation.setFillAfter(true);
    /*
    设置动画的重复次数,这里的重复次数指的是动画第一次播放完毕后还会重复播放几次,这里设置为3,就是动画一共播放四次,开始执行一次动画,然后再重复执行三次。
     */
    alphaAnimation.setRepeatCount(3);
    /*
    设置动画重复的模式
    有Animation.RESTART:在动画多次播放时每一次都和第一次一样,重复执行
     Animation.REVERSE:每一次执行动画是,和上一次执行相反的操作
    例如动画是把view放大到原来的两倍,动画一共执行4次
    如果是Animation.RESTART,就会每次都从view本身的大小变到2倍的大小,这一过程一共执行4次
    如果是Animation.REVERSE,则第一回从本身大小到2倍,第二回从2倍到本身大小,第三回从2倍到view本身第四回再从view本身到2倍
    */
     alphaAnimation.setRepeatMode(Animation.REVERSE);
    

    用透明动画举例

    单独使用动画

    1 AlphaAnimation
    AlphaAnimation是透明动画,可以改变view的透明度
    1.1 创建动画

    //创建动画,并设置起止透明度,传入的数据是浮点型,需要加f
    //参数范围从0到1,0表示完全透明,1表示完全不透明
    //第一个参数为开始的时候的透明度,第二个参数为结束的时候的透明度
    AlphaAnimation alphaAnimation=new AlphaAnimation(1.0f,0);
    alphaAnimation.setDuration(2000);
    alphaAnimation.setRepeatCount(3);
    alphaAnimation.setRepeatMode(Animation.REVERSE);
    

    1.2 执行动画
    首先找到需要执行动画的view,然后调用startAnimation方法,并传入需要执行的动画

    imageView.startAnimation(alphaAnimation);
    

    2 ScaleAnimation
    缩放动画,控制view的缩放
    2.1 创建动画

     /*传入8个参数
    前4个参数分别为:
    开始长度的缩放比例,终止长度的缩放比例,其实宽度的缩放比例,终止宽度的缩放比例
    这四个参数都是浮点型的,代表和原view相比放大或者缩小的比例,1.0代表不变,2.0代表放大到原来的2被,0.5则代表缩小到原来的0.5倍
    后四个参数设置缩放的中心点。分别为:
    x轴的模式,x轴中心点的位置,y轴的模式,y轴中心点的位置
    模式有三种
    Animation.RELATIVE_TO_SELF:相对于自己
    Animation.RELATIVE_TO_PARENT:相对于父元素
    Animation.ABSOLUTE:绝对距离
    如果是前两种模式,后面传入的参数代表时父元素或者自己的几倍
    例如下面这种写法,代表相对于自己,大小是自己长宽的0.5倍,那么中心点x轴坐标就在空间长度一半的位置
    y轴坐标也在控件一半的位置,(android动画中坐标原点都在执行该动画的view的左上角),那个中心点就是该元素的中心。
    相对于父元素的也是如此,这两种x,y的坐标是相对的view乘以相应的比例得到的
    如果是第三种模式,那个传入的参数谁也不相对,传入的参数是多少,坐标就是多少,坐标原点永远是view的左上角
    */
    ScaleAnimation scaleAnimation=new ScaleAnimation(1.0f,2.0f,1.0f,2.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
    

    可以再设置一些其他需要的参数
    2.2 执行动画
    执行动画都是一样的操作
    3 RotateAnimation
    旋转动画,控制view的旋转操作
    3.1 创建动画

    /*
    传入6个参数,前2个参数是开始时旋转的角度,和结束时旋转的角度
    正数代表顺时针,负数代表逆时针
    后四个参数为设置旋转的中心点,和ScaleAnimation设置中心点一致
    */
    RotateAnimation rotateAnimation=new RotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
    

    可以设置一些其他的参数
    3.2 执行动画
    执行动画都是一样的
    4 TranslateAnimation
    位移动画,控制view的移动
    4.1 创建动画

    /*
    传入8个参数
    一共四组,分别为
    起始时view的左上角x轴坐标
    结束时view的左上角x坐标
    起始时view的左上角y坐标
    结束时view的左上角y坐标
    view左上角坐标默认为(0,0)
    每一组是一个模式加一个值组成的,模式和值进行计算得出实际的坐标值
    有关模式的可以看ScaleAnimation中的讲解
     */
    TranslateAnimation translateAnimation=new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0.5f);
    

    可以设置一些其他的参数
    4.2 执行动画

    动画合集

    5 AnimationSet
    动画的合集,使用它可以控制前面列出的四种动画中的一种或者多种一起执行
    5.1 创建AnimationSet

    //传入一个boolean类型的参数,这个参数控制的是动画执行时是匀速执行还是不匀速执行
    //这个参数不好用,直接都传入true,让他匀速执行就可以
     AnimationSet animationSet=new AnimationSet(true);
    

    5.2 将动画加入到AnimationSet中

    animationSet.addAnimation(translateAnimation);
    animationSet.addAnimation(scaleAnimation);
    animationSet.addAnimation(alphaAnimation);
    animationSet.addAnimation(rotateAnimation);
    

    5.3 可以设置一些参数,如果在set中设置参数,就会对set中所有的动画起作用,每个动画自己设置的参数只对自己起作用

    animationSet.setDuration(2000);
    

    5.4 执行动画

    imageView.startAnimation(animationSet);
    
    二 用xml的方式定义补间动画

    用代码定义的动画都可以用xml的方式实现
    首先在res目录下建立一个anim目录
    再在anim目录下建立一个动画文件,在此动画文件中开始写xml

    同样先说所有动画的公共属性

    不用多说,和上面完全一致,需要说一点,有时这些属性没有代码提示,直接手打出来就行。

    android:duration="2000"
    android:repeatMode="restart"
    android:repeatCount="3"
    android:fillAfter="true"
    

    1 透明动画
    1.1 在xml文件中写动画

    <!--需要说明的有两个参数
     fromAlpha,toAlpha,分别代表开始的透明度和结束的透明度,大小从0到1
    在xml中浮点型不用加f
    -->
    <alpha
    android:fromAlpha="1"
    android:toAlpha="0"
    android:duration="2000"
    android:repeatMode="restart"
    android:repeatCount="3"
    android:fillAfter="true"/>
    

    1.2 执行动画

    //用AnimationUtils工具类把动画加载进行,传入两个参数,一个上下文,一个动画资源的id
    AlphaAnimation animation=AnimationUtils.loadAnimation(this,R.anim.animation);
    //执行动画
    imageView.startAnimation(animationSet);
    

    2 缩放动画
    2.1 创建动画

     <!--
        fromXScale:开始时长度的大小,参数代表这个长度和view自身长度的比例,即这个长度是view自身长度的几倍
        toXScale:结束是长度的大小
        fromYScale:开始时宽度的大小
        toYScale:结束是宽度的大小
        pivotX:旋转中心点横坐标,可以传入三种类型的参数,
        50%,代表横坐标view自身的长度的50%
        50%p,代表横坐标是父元素控件的50%
        50,代表横坐标就是50。
        坐标原点是view的左上角坐标
        pivotY:旋转中心点纵坐标
        同pivotX
        -->
        <scale
            android:fromXScale="1"
            android:toXScale="2"
            android:fromYScale="1"
            android:toYScale="2"
            android:pivotX="50%"
            android:pivotY="50%"/>
    

    2.2 执行动画
    加载动画,执行动画
    3 旋转动画
    3.1 创建动画

     <!--
        fromDegrees:开始角度
        toDegrees:结束角度
        pivotX,pivotY:设置旋转中心点,和scale中的一样
        -->
        <rotate
            android:fromDegrees="0"
            android:toDegrees="360"
            android:pivotX="50%"
            android:pivotY="50%"/>
    

    3.2 执行动画
    加载动画,并执行动画
    4 位移动画
    4.1 创建动画

     <!--
        fromXDelta:动画开始时view左上角x坐标的位置
        toXDelta:动画结束时view左上角x坐标的位置
        fromYDelta:动画开始时view左上角坐标的位置
        toYDelta:动画结束时view左上角y坐标的位置
        这四个参数都可以传入
        50%,代表横坐标view自身的长度的50%
        50%p,代表横坐标是父元素控件的50%
        50,代表横坐标就是50。
        坐标原点是原始view的左上角坐标
        -->
        <translate
            android:fromXDelta="0"
            android:toXDelta="0"
            android:fromYDelta="0"
            android:toYDelta="50%"/>
    

    4.2 执行动画
    加载动画,执行动画

    动画合集

    5 set 动画的合集
    此时根元素是set元素,set元素中可以写入多个动画
    set可以设置属性,set中的属性所有动画共享,动画内部的属性只有该动画自己可以使用
    5.1 创建动画

    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="2000">
        <alpha
            android:fromAlpha="1"
            android:toAlpha="0"
            android:duration="2000"
            android:repeatMode="restart"
            android:repeatCount="3"
            android:fillAfter="true"/>
        <translate
            android:fromXDelta="0"
            android:toXDelta="0"
            android:fromYDelta="0"
            android:toYDelta="50%"/>
        <scale
            android:fromXScale="1"
            android:toXScale="2"
            android:fromYScale="1"
            android:toYScale="2"
            android:pivotX="50%"
            android:pivotY="50%"/>
        <rotate
            android:fromDegrees="0"
            android:toDegrees="360"
            android:pivotX="50%"
            android:pivotY="50%"/>
    </set>
    

    5.2 执行动画

     AnimationSet set= (AnimationSet) AnimationUtils.loadAnimation(this,R.anim.animation);
    imageView.startAnimation(set);
    

    相关文章

      网友评论

        本文标题:Android补间动画

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