在 viewpager2 中禁用动画

Disable animation in viewpager2

我有 viewpager2 和扩展 FragmentStateAdapter 的适配器。我希望用户仅通过单击 tablayout 转到另一个页面。我已禁用此 viewpager2 的用户输入。但是当我点击标签时,有页面之间快速滑动的动画。但我只想展示新片段。与 FragmentTransaction 类似,但使用 viewpager2 和 tablayout。有谁知道怎么做?

我认为 viewpager2.setPageTransformer(null) 可能会满足您的需求

https://developer.android.com/reference/kotlin/androidx/viewpager2/widget/ViewPager2#setpagetransformer

Note: setting a PageTransformer disables data-set change animations to prevent conflicts between the two animation systems. Setting a null transformer will restore data-set change animations.

您应该像这样使用 addOnTabSelectedListener:

    tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
        override fun onTabReselected(tab: TabLayout.Tab?) {
        }

        override fun onTabUnselected(tab: TabLayout.Tab?) {
        }

        override fun onTabSelected(tab: TabLayout.Tab?) {
            tab?.position?.let { viewPager?.setCurrentItem(it, false) }
        }

    })

您已经在使用

viewPager.isUserInputEnabled = false

注意: setCurrentItem(int item, boolean smoothScroll)

Set the currently selected page with smooth scroll. If you set smooth scroll is false, you don't see the animation

TabLayoutMediator 是您所需要的。只需将 smoothScroll 设置为 false。

public TabLayoutMediator(
  @NonNull TabLayout tabLayout,
  @NonNull ViewPager2 viewPager,
  boolean autoRefresh,
  boolean smoothScroll,
  @NonNull TabConfigurationStrategy tabConfigurationStrategy) 

https://developer.android.com/reference/com/google/android/material/tabs/TabLayoutMediator