在Android中使用导航组件时如何删除默认动画过渡?

sar*_*rah 1 android kotlin android-navigation android-architecture-components android-jetpack

我正在使用导航组件,并且在主活动中有一个底部导航视图。当我点击该底部导航视图中的选项卡时,出现该片段时似乎动画淡入了。我认为我没有手动设置动画,似乎默认情况下该动画会存在。

我想删除该动画。这是我在主要活动中使用的代码。

class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener {

    private lateinit var navController : NavController
    lateinit var destinationTitleTextView : TextView
    lateinit var progressBar : ProgressBar
    lateinit var topToolbar : Toolbar
    lateinit var bottomNavigationView : BottomNavigationView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        FirebaseApp.initializeApp(this)

        // Initial Setup views
        navController = Navigation.findNavController(this,R.id.nav_host_fragment)
        setupBottomNavMenu(navController)
        setupActionBar(navController)
        setUpViewDeclaration()


        // Add Listeners
        navController.addOnDestinationChangedListener(this)


    }



    private fun setUpViewDeclaration() {
        destinationTitleTextView = findViewById(R.id.destination_label_text_view)
        progressBar = findViewById(R.id.progressBar_main_activity)
        topToolbar = findViewById(R.id.top_toolbar)
        bottomNavigationView = findViewById(R.id.bottom_nav)

    }

    private fun setupBottomNavMenu(navController: NavController) {
        bottom_nav.setupWithNavController(navController)
    }


    private fun setupActionBar(navController: NavController) {

        setSupportActionBar(top_toolbar)
        supportActionBar?.setDisplayShowTitleEnabled(false)

        // set up top hierarchy destination
        val appBarConfiguration = AppBarConfiguration(setOf(
            R.id.destination_home,
            R.id.destination_search,
            R.id.destination_user_control,
            R.id.destination_create_event)
        )

        top_toolbar.setupWithNavController(navController,appBarConfiguration)

    }


}
Run Code Online (Sandbox Code Playgroud)

HvS*_*mon 6

您可以添加动画文件来替换默认动画。

  • res / anim / nav_default_enter_anim.xml
  • res / anim / nav_default_exit_anim.xml
  • res / anim / nav_default_pop_enter_anim.xml
  • res / anim / nav_default_pop_exit_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!--Empty to disable animation-->
</set>
Run Code Online (Sandbox Code Playgroud)

[导航组件]我无法从NavigationUI.setupWithNavController()更改动画

  • 请注意,这不是导航组件支持的东西,并且会在导航的未来版本中中断,并且在使用[命名空间资源](https://developer.android.com/reference 时在工具级别不受支持/tools/gradle-api/com/android/build/api/dsl/AaptOptions#namespaced)。 (6认同)
  • 只是添加文件并没有改变我的动画。我必须在哪里引用它们? (2认同)
  • 这些文件应该位于 ```res\animator``` 包中 (2认同)

A1m*_*A1m 5

@HvSimon 提供了一个解决方案来设置对我不起作用的全局默认值。另外我想选择/禁用每个过渡的动画。

您可以navigate()NavOptions对象提供额外的参数。

首先在您的 res 文件夹中创建一个动画,例如res/anim/nav_enter_anim.xml(空表示没有动画):

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!--Empty to disable animation-->
</set>
Run Code Online (Sandbox Code Playgroud)

为每个动画创建一个动画 xml 或重复使用相同的动画。然后NavOptions为您的navigate()调用提供一个对象,如下所示:

val animationOptions = NavOptions.Builder().setEnterAnim(R.anim.nav_enter_anim)
            .setExitAnim(R.anim.nav_exit_anim)
            .setPopEnterAnim(R.anim.nav_pop_enter_anim)
            .setPopExitAnim(R.anim.nav_pop_exit_anim).build()

findNavController().navigate(MyFragmentDirections.toMainActivity(), animationOptions)
Run Code Online (Sandbox Code Playgroud)