jetpack navigation graph을 이용해 bottom navigation을 구현하면 design 탭에서 설정한 애니메이션이 적용되질 않는다..
따로 애니메이션 builder로 빌드해서 설정해주어야 한다.
private fun initNavigation() {
// 네비게이션 호스트
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.navigationHost) as NavHostFragment
// 네비게이션 컨트롤러
val navController = navHostFragment.navController
val homeTransitionAnim = NavOptions.Builder()
.setLaunchSingleTop(true)
.setEnterAnim(R.anim.slide_in_right)
.setExitAnim(R.anim.slide_out_left)
.setPopEnterAnim(R.anim.slide_in_left)
.setPopExitAnim(R.anim.slide_out_right)
.setPopUpTo(navController.graph.startDestinationId, false)
.build()
val dictionaryTransitionOption = NavOptions.Builder()
.setLaunchSingleTop(true)
.setEnterAnim(R.anim.slide_in_right)
.setExitAnim(R.anim.slide_out_left)
.setPopEnterAnim(R.anim.slide_in_left)
.setPopExitAnim(R.anim.slide_out_right)
.setPopUpTo(navController.graph.startDestinationId, false)
.build()
binding.bottomNavigation.setOnItemSelectedListener { item ->
when (item.itemId) {
R.id.draw -> {
navController.navigate(R.id.draw, null)
}
R.id.home -> {
navController.navigate(R.id.home, null, homeTransitionAnim)
}
R.id.dictioniary -> {
navController.navigate(R.id.dictioniary, null, dictionaryTransitionOption)
}
}
true
}
binding.bottomNavigation.setOnItemReselectedListener { item ->
if (item.itemId == R.id.draw) navController.navigate(R.id.draw, null)
}
binding.bottomNavigation.itemIconTintList = null
binding.bottomNavigation.selectedItemId = R.id.home
}