Android补间动画

一、补间动画的基本介绍

补间动画分为AlphaAnimation(淡入淡出),ScaleAnimation(缩放动画),TranslateAnimation(平移),RotateAnimation(旋转)。

补间动画只能作用于View,且对View进行的只是显示效果的改变,并不是改变它的属性。

同时我们也要知道系统对view的坐标是如何定义的

二、在xml中设置补间动画

这里我们要在res下建一个anim目录再在这个目录下建Animation Resource File一个

 1、AlphaAnimation(淡入淡出)

这里是指从原本的View中开始,到0.0代表完全淡出。

这里的duration是设置动画时间长短,也可以不在xml中设置。到时候在具体实现代码中设置也行

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration = "500">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:duration= "2000"
        />
</set>

2、ScaleAnimation(缩放动画)

fromXScale是指沿着X轴起始缩放的比例

fromYScale是指沿着Y轴起始缩放的比例

toXScale是指沿着X轴结束缩放的比例

toXScale是指沿着X轴结束缩放的比例

pivotX是指缩放的中轴点的X坐标

pivotX是指缩放的中轴点的X坐标

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

3、TranslateAnimation(平移)

从下到上平移上来:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration = "500">
    <translate
        android:fromYDelta="100%"
        android:toYDelta="0%"/>
</set>

从左向右平移进来:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration = "500">
    <translate
        android:fromXDelta="-100%"
        android:toXDelta="0%"/>
</set>

4、RotateAnimation(旋转)

fromDegrees是旋转的起始角度

toDegrees是结束旋转的角度

repeatCount是旋转的次数,默认值为0,代表一次,假如是其他值,比如3,则旋转4次 另外,值为-1或者infinite时,表示动画永不停止

repeatMode是重复模式,如果repeatCount>0或者为-1或infinte才有效

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
    android:fromDegrees="0"
    android:toDegrees="360"
    android:repeatCount = "1"
    android:repeatMode = "restart"
    android:duration = "2000"/>
</set>

5、组合动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:shareInterpolator="true" >

    <scale
        android:duration="2000"
        android:fromXScale="0.2"
        android:fromYScale="0.2"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.5"
        android:toYScale="1.5" />

    <rotate
        android:duration="1000"
        android:fromDegrees="0"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:toDegrees="360" />

    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="320"
        android:toYDelta="0" />

    <alpha
        android:duration="2000"
        android:fromAlpha="1.0"
        android:toAlpha="0.1" />

</set>

三、具体的代码示例:

1、基本的运用

淡入淡出

 val mAnimation = AnimationUtils.loadAnimation(this.requireContext(),R.anim.alpha_animation)
        binding.imageView.setOnClickListener {
            it.startAnimation(mAnimation)
        }
    }

组合:

 val mAnimation = AnimationUtils.loadAnimation(this.requireContext(),R.anim.animations)
        binding.imageView.setOnClickListener {
            it.startAnimation(mAnimation)
        }
    }

2、基于fragment切换时的动画组合:

fun Fragment.navigateTo(
    target: Fragment,
    enterAnim: Int = R.anim.enter_from_right,
    exitAnim: Int = R.anim.exit_to_left,
    popEnter:Int = R.anim.pop_enter_from_left,
    popExit: Int = R.anim.pop_exit_to_right,
    addToStack:Boolean=true
){
    parentFragmentManager.commit {
        //设置动画
        setCustomAnimations(enterAnim,exitAnim,popEnter,popExit )
        //切换图片
        replace(R.id.fragmentContainerView, target)
        setReorderingAllowed(true)
        if (addToStack){ //是否入栈
            addToBackStack(null)
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值