• 过度动画效果


    1.AlphaAnimation(透明度动画)

    2.ScaleAnimation(缩放动画)

    3.TransalteAnimation(平移动画)

    4.RotateAnimation(旋转动画)

    先看下Animation的常用属性

     1 Animation anim = new AlphaAnimation(1,0.1f);
     2 //设置动画执行的时长(1秒)
     3 anim.setDuraion(1000);
     4 //动画执行结束后停留效果(1)
     5 anim.setFillAfter(true);
     6 anim.setFillBefore(true);
     7 //重复播放动画(2)
     8 anim.setRepeatCount(1);
     9 //反转播放动画(3)
    10 anim.setRepeatMode(2);
    11 //设置动画速度,默认为均速(4)
    12 anim.setInterpolator(new LinearInterolator());
    13 //设置动画的启动时间(2秒)
    14 anim.setStartOffset(2000);

    (1)动画执行结束后停留效果:

     动画执行结束后setFillAfter停留在动画的最后一帧,而setFillBefore停留在动画的第一帧,打个比方,点击图标从A点移动到B点,setFillAfter会把图片留在B点(图标虽然显示在B点,但该控件的位置依然在A点,这时候点击图标没什么效果,点击A点动画会再次执行),而setFillBefore会把图标停留在原点(执行后看着好像没什么效果)。

    (2)重复播放动画:

      setRepeatCount用int型的值,如果填入的值为负数,动画会无限次重复播放。值为0或者整数,重复播放的次数在原来的值上加1,就比如值为0,它会执行1次,值为2,它会执行3次。

    (3)反转播放动画:

      解释一下反转播放动画,比如平移效果,点击图标,图标会从A点移动到B点,然后它就会从B点移动回A点。setRepeatMode需要和setRepeatCount配合使用,不然不会有效果。setRepeatMode也是用int型的值,研究了一下,它的值为2,和setRepeatCount配合,setRepeatCount的值为-1和1,发现其他的没有效果。setRepeatCount的值为1,整个流程效果(从有到无,然后从无到有)实现一次,值为-1整个流程会无限循环播放。

    (4)设置动画速度:

      setInterpolator的效果目前有9种,分别为:

      a.LinearInterpolator() //均速动画,此动画跟默认动画一致

      b.AccelerateInterolator() //加速动画,动画执行速度会越来越快

      c.DecelerateInterolator() //减速动画,动画执行速度会越来越慢

      d.AccelerateDecelerateInterolator() //动画加速后再减速

      e.AnticipateInterolator() //反向执行一段后,再加速反向回去

      f.OvershootInterolator() //加速之后,回弹一小点

      g.AnticipateOvershootInterolator() //反向执行一段后,再加速回去,再反向回一小段,相当于弹簧,压弹簧一段,然后在加速弹出

      h.BounceInterolator() //动画执行完后回弹跳跃几段(相当于高空掉下一个篮球,到地面后会回弹几下)

      i.CycleInterolator(1) //带float型参数,值为0无效

    附带一个APK(点击我获取APK,提取码:gkvc,点击我获取APK的代码

    透明度动画:

      有一批人称“AlphaAnimation”为透明度动画,又有另一批称渐变动画,管它是透明还是渐变,怎么顺口怎么来。该动画的透明度取值0.0到1.0,0表示完成透明,1表示原有的透明不变,下面用两个方法实现透明度动画效果,首先使用xml实现。

      在res文件中新建anim文件夹,然后在anim中新建alpha.xml,文件路径:res/anim/alpha.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration = "1000"
        android:fromAlpha = "1"
        android:toAlpha = "0.1"
        android:fillAfter = "true"/>

           引用的方法:

    //alphaSwitchImg绑定好的图片控件
    private void setAnimXML() {
          Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha);
          alphaSwitchImg.startAnimation(anim);
     }
    

      以上用xml实现,下面直接在代码中实现,想看效果,博客尾部有附加APK和代码链接。

    private void setAnimJava(){
         Animation anim = new AlphaAnimation(0.1f,1);
         anim.setDuration(1000);
         anim.setFillAfter(true);
         alphaSwitchImg.startAnimation(anim);
    }
    

       透明度动画效果:

     

    缩放动画:

      ScaleAnimation效果可直接收缩,也可以设置缩放位置:X、Y、中心点,参数:

        fromX  : //动画起初时,X坐标上的伸缩尺寸0.0表示缩放到没有

        toX  : //动画结束时,X坐标上的伸缩尺寸1.0表示正常无伸缩

        fromY : //动画起初时,Y坐标上的伸缩尺寸值小于1.0表示收缩

        toY  : //动画起初时,Y坐标上的伸缩尺寸值大于1.0表示扩大

        pivotXType : //动画在X轴相对于物件位置类型

        pivotXValue: //动画相对于物件的X坐标开始位置

        pivotXType : //动画在Y轴相对于物件位置类型

        pivotYValue: //动画相对于物件的Y坐标开始位置

      直接收缩代码:

    Animation anin = new  ScaleAnimation(0,1,0,1);
    anim.setDuration(1000);
    img.startAnimation(anim);

      可调动缩放位置,pivotXValue和pivotYValue值:0左上角位置、0.5f中间位置、1右下角位置

    Animation anim = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    anim.setDuration(1000);
    anim.setFillAfter(true);
    img..startAnimation(anim);
    

      使用布局文件实现收缩效果,路径:src/anim/scale.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <scale
            android:duration = "1000"
            android:fillAfter = "true"
            android:fromXScale="0"
            android:fromYScale="0"
            android:pivotX="0.5"
            android:pivotY="0.5"
            android:toXScale="1"
            android:toYScale="1"/>
    </set>
    

      使用方法:

    Animation anim = AnimationUtils.loadAnimation(this,R.anim.scale);
    img.startAnimation(anim);
    

      缩放动画效果:

     

    平移动画:

      TransalteAnimation平移效果,可上下左右全方位移动,参数1(通过分辨率的宽高例如:1080 * 2160):

        fromXDelta: //动画未开始执行原点X坐标值

        toXDelta: //动画执行结束终点X坐标值

        fromYDelta: //动画未开始执行原点Y坐标值

        toYDelta: //动画执行结束终点Y坐标值

      实现代码(设置终点X值为1080):

    Animation anim = new TranslateAnimation(0,1080,0,0);
    anim.setDuration(1000);
    anim.setFillAfter(true);
    img.startAnimation(anim);

      参数2(移动的值是0 - 1,就比如0.5f移动到屏幕中间):

        fromXValue: //动画未开始执行原点X坐标值

        toXValue:  //动画执行结束终点X坐标值

        fromYValue: //动画未开始执行原点Y坐标值

        toXValue:  //动画执行结束终点Y坐标值

      实现代码(设置终点X值为1):

    Animation anim = new TranslateAnimation(
                    Animation.RELATIVE_TO_PARENT, 0,
                    Animation.RELATIVE_TO_PARENT, 1,
                    Animation.RELATIVE_TO_PARENT, 0,
                    Animation.RELATIVE_TO_PARENT, 0);
    anim.setDuration(1000);
    anim.setFillAfter(true);
    img.startAnimation(anim);
    

      布局文件实现平,路径:src/anim/transalte.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration = "1000"
            android:fromXDelta="0"
            android:fromYDelta="0"
            android:toXDelta="400"
            android:toYDelta="0"
            android:fillAfter="true"/>
    </set>
    

      使用方法:

    Animation anim = AnimationUtils.loadAnimation(this,R.anim.transalte);
    img.startAnimation(anim);
    

      平移动画效果:

    旋转动画:

      RotateAnimation旋转效果,旋转的位置:X、Y、中心点,旋转的方向:逆转、顺转,(fromDegrees - toDegress的值是负数时方向为顺转,正数时为逆转),参数:

        fromDegress: //动画起初时的旋转角度

        toDegress  : //动画旋转到达的角度

        pivotXType : //动画在X轴相对于物件位置类型

        pivotXValue: //动画相对于物件的X坐标开始位置

        pivotYType : //动画在Y轴相对于物件位置类型

        pivotYValue: //动画相对于物件的Y坐标开始位置

      实现代码,效果:图片中心点旋转,均速的速度用3秒顺时针旋转一圈:

    Animation anim = new RotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
    anim.setDuration(3000);
    anim.setInterpolator(new LinearInterpolator());
    img.startAnimation(anim);

      布局文件实现,路径:res/anim/rotate.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <rotate
            android:duration="3000"
            android:interpolator = "@android:anim/linear_interpolator"
            android:pivotX="50%"
            android:pivotY="50%"
            android:fromDegrees="0"
            android:toDegrees="360"/>
    </set>
    

      使用方法:

    Animation anim = AnimationUtils.loadAnimation(this,R.anim.rotate);
    img.startAnimation(anim);
    

      旋转动画效果:

      使用RecyclerView实现Image动画效果:

     

    最后附加APK(点我获取,提取码:6ae5,点我获取代码

  • 相关阅读:
    Linux基本权限管理
    Spring JMS
    消息中间件 ActiveMQ的简单使用
    Ionic slides 轮播图
    Spring 3 MVC and XML example
    Java 数组
    Java String类
    Java static 使用
    http://blog.csdn.net/huang_xw/article/details/7090173
    http://blog.chinaunix.net/uid-20577907-id-3519578.html
  • 原文地址:https://www.cnblogs.com/Mr-Deng/p/12053611.html
Copyright © 2020-2023  润新知