[android] bottom navigation graph animation

문돌이 개발자·2023년 11월 20일

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
    }
profile
까먹고 다시 보려고 남기는 기록

0개의 댓글