目录
(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,完成