【问题标题】:Disable animation in viewpager2在 viewpager2 中禁用动画
【发布时间】:2020-04-19 09:53:04
【问题描述】:

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

【问题讨论】:

  • 很奇怪。我的 viewpager2 动画太慢了。我希望它走得更快。没有设置其他任何东西,只是默认的平滑滚动。问题是,它太流畅了,速度太慢了。

标签: android kotlin android-tablayout android-viewpager2


【解决方案1】:

你应该像这样使用 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)

设置当前选中的页面平滑滚动。如果你设置平滑 滚动是假的,你看不到动画

【讨论】:

    【解决方案2】:

    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

    【讨论】:

      【解决方案3】:

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

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

      注意:设置 PageTransformer 会禁用数据集更改动画,以防止两个动画系统之间发生冲突。设置 null 转换器将恢复数据集更改动画。

      【讨论】:

      • 这不起作用,因为Setting a null transformer will restore data-set change animations.
      猜你喜欢
      • 2020-05-25
      • 2023-02-01
      • 2019-07-25
      • 2019-11-14
      • 1970-01-01
      • 2013-01-19
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多