fragment跳转时添加动画

目录

(1)创建动画文件

slide_left_in:

slide_left_out:

slide_right_in:

slide_right_out:

(2)在PageEnum中添加界面等级属性

(3)修改activity中实现的changePage()方法


先看上篇加载fragment文章,本篇是在上篇的基础上进行改进

关于android使用kotlin语言实现activity加载fragment时多个fragment的跳转的一种解决方案总结-CSDN博客

(1)创建动画文件

在res文件夹下创建anim文件夹,在其中创建以下xml文件

slide_left_in:

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

    <alpha
        android:fromAlpha="0.5"
        android:toAlpha="1.0"/>
</set>

slide_left_out:

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

    <translate
        android:fromXDelta="0%p"
        android:toXDelta="-100%p"/>

    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.5"/>

</set>

slide_right_in:

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

    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0%p"/>

    <alpha
        android:fromAlpha="0.5"
        android:toAlpha="1.0"/>

</set>

slide_right_out:

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

    <translate
        android:fromXDelta="0%p"
        android:toXDelta="100%p"/>

    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.5"/>

</set>

(2)在PageEnum中添加界面等级属性

每个界面的界面等级就是从首页最多需要跳转几次才能到达

enum class PageEnum(var code:String,var pageName:String,var pageOrdinal: Int) {
    HomeCenter("HomeCenter","首页",1),
    ControlCentre("ControlCentre","控制中心",2),
    Config("Config","设置",3);

    open fun getInstanceByCode(code:String?) :PageEnum?{
        for (item in values()) {
            if (item.code.contentEquals(code)) {
                return item
            }
        }
        return HomeCenter
    }
}

(3)修改activity中实现的changePage()方法

 override fun changePage(toPageEnum: PageEnum?) {
        val currentFragment: BaseFragment? = fragmentMap[currentPageEnum.code]
        var toFragment: BaseFragment? = fragmentMap[toPageEnum!!.code]
        val tran = supportFragmentManager.beginTransaction()

        //左移动画 : tran.setCustomAnimations(R.anim.slide_right_in,R.anim.slide_left_out,R.anim.slide_left_in,R.anim.slide_right_out).hide(currentFragment)
        //右移动画:tran.setCustomAnimations(R.anim.slide_left_in,R.anim.slide_right_out,R.anim.slide_left_out,R.anim.slide_right_in).hide(currentFragment)
        if (currentFragment != null){
            if (currentPageEnum.pageOrdinal< toPageEnum.pageOrdinal){
                tran.setCustomAnimations(R.anim.slide_right_in,R.anim.slide_left_out,R.anim.slide_left_in,R.anim.slide_right_out).hide(currentFragment)
            }else{
                tran.setCustomAnimations(R.anim.slide_left_in,R.anim.slide_right_out,R.anim.slide_left_out,R.anim.slide_right_in).hide(currentFragment)
            }
        }
        if (toFragment == null){
            if (toPageEnum === PageEnum.HomeCenter){
                homeCenterFragment = HomeCenterFragment()
                toFragment = homeCenterFragment
            }else if (toPageEnum === PageEnum.ControlCentre){
                centreFragment = ControlCentreFragment()
                toFragment = centreFragment
            }else if (toPageEnum === PageEnum.Config){
                configFragment = ConfigFragment()
                toFragment = configFragment
            }
            if (toFragment != null){
                tran.add(R.id.home_center_fragment,toFragment,toFragment::class.java.name)
                fragmentMap[toPageEnum.code] = toFragment
            }
        }else{
            if (currentPageEnum.pageOrdinal < toPageEnum.pageOrdinal){
                tran.setCustomAnimations(R.anim.slide_right_in,R.anim.slide_left_out,R.anim.slide_left_in,R.anim.slide_right_out).show(toFragment)
            }else{
                tran.setCustomAnimations(R.anim.slide_left_in,R.anim.slide_right_out,R.anim.slide_left_out,R.anim.slide_right_in).show(toFragment)
            }
        }
        if (currentPageEnum.pageOrdinal < toPageEnum.pageOrdinal){
            tran.setCustomAnimations(R.anim.slide_left_in,R.anim.slide_right_out,R.anim.slide_left_out,R.anim.slide_right_in).commit()
        }else{
            tran.setCustomAnimations(R.anim.slide_left_in,R.anim.slide_right_out,R.anim.slide_left_out,R.anim.slide_right_in).commit()
        }
        currentPageEnum = toPageEnum
  }

ok,完成

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小趴菜8227

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值