美文网首页
View动画解析

View动画解析

作者: 彩虹_直至黑白 | 来源:发表于2022-02-12 15:27 被阅读0次

    View动画通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度)从而产生动画效果,它是一种渐进式动画,并且View支持自定义。View动画的作用对象是View,支持4种动画效果,分别是平移动画,缩放动画,旋转动画,透明度动画

    View动画种类

    View动画的四种变换效果对应着Animation的四个子类:TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation。这四种动画既可以通过XML来定义,也可以通过代码来动态创建,对于View动画来说,建议采用XML来定义动画,这主要是因为XML格式的动画可读性更好。

    image
    平移动画
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:fillAfter="true">
            <!--<set>标签表示动画集合,对应AnimationSet类,它可以包含若干个动画-->
        <!-- android:duration  动画持续时间, 默认值是0 (单位ms)-->
        <!-- android:fillAfter 表示动画结束后是否保留动画后的状态,true保留动画后状态,false恢复原来状态,默认值是false -->
        <!-- android:fillBefore 表示动画结束后是否保留动画前的状态,true恢复原来状态,false保留动画后状态,默认值是true-->
        <!--android:interpolator 设置动画的变化速率 即插值器,改变动画变换的速度-->
        <!--android:repeatMode 设置动画重复的模式,其值可以有,restart( 1 ),表示顺序播放,reverse(2)表示重复的时候逆向播放 -->
        <translate
            android:fromXDelta="0"
            android:fromYDelta="0"
            android:toXDelta="50%p"
            android:toYDelta="50%p" />
        
        <!--    在这些属性里面还可以加上%和p,例如:-->
        <!--    android:toXDelta="100%",表示自身的100%,也就是从View自己的位置开始。-->
        <!--    android:toXDelta="80%p",表示父层View的80%,是以它父层View为参照的。-->
    </set>
    
    缩放动画
    <?xml version="1.0" encoding="utf-8"?>
    <scale xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:fillAfter="true"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="-1"
        android:repeatMode="reverse"
        android:startOffset="0"
        android:toXScale="1.1"
        android:toYScale="1.1" />
    
        <!-- android:fromXScale  水平方向缩放的起始值,比如0.5-->
        <!--android:toXScale 水平方向缩放的结束值,比如1.2-->
        <!--android:fromYScale 竖直方向缩放的起始值-->
        <!--android:toYScale 竖直方向缩放的结束值-->
        <!--android:pivotX 缩放的轴点的x坐标,它会影响缩放的效果-->
        <!--android:pivotY 缩放的轴点的y坐标,它会影响缩放的效果-->
    
    旋转动画
    <?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="2000"
        android:fillAfter="true"
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="-1"
        android:toDegrees="360" />
    
        <!-- android:fromDegrees——旋转开始的角度,比如0;-->
        <!-- android:toDegrees——旋转结束的角度,比如180;-->
        <!-- android:pivotX——旋转的轴点的x坐标;-->
        <!-- android:pivotY——旋转的轴点的y坐标。-->
    
    透明度动画
    <?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="2000"
        android:fillAfter="true"
    
        android:fromAlpha="1"
        android:toAlpha="0.6" />
    
        <!--    0f表示完全透明,1f表示完全不透明-->
        <!--    android:fromAlpha   动画开始的透明度-->
        <!--    android:toAlpha     动画结束时的透明度-->
    

    那我们该如何应用上面的动画呢 ?

            btnScale.setOnClickListener {
                val animation = AnimationUtils.loadAnimation(this, R.anim.view_anim_scale)
                btnScale.startAnimation(animation)
            }
    

    最后,关于动画添加过程的监听我们可以通过Animation的setAnimationListener方法

       animation.setAnimationListener(object : Animation.AnimationListener {
    
                    override fun onAnimationStart(animation: Animation?) {
    
                    }
    
                    override fun onAnimationEnd(animation: Animation?) {
    
                    }
    
                    override fun onAnimationRepeat(animation: Animation?) {
    
                    }
                }
    

    相关文章

      网友评论

          本文标题:View动画解析

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