Disable animation in viewpager2
Asked Answered
B

3

15

I have viewpager2 and adapter for him that extends FragmentStateAdapter. I want user to go to another page only by clicking on tablayout. I have disabled user input for this viewpager2. But when I click on tab, there is animation of fast swiping between pages. But I want just new fragment to show. Like with FragmentTransaction, but with viewpager2 and tablayout. Does anyone knows ho to do it?

Belanger answered 19/4, 2020 at 9:53 Comment(1)
weird. my viewpager2 animation is so slow. i want it to go faster. didnt set anything else just the default smooth scrolling. problem is, its too smooth that its slow.Kenogenesis
C
19

You should use addOnTabSelectedListener like this:

    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) }
        }

    })

You already use

viewPager.isUserInputEnabled = false

Note : 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

Capet answered 19/4, 2020 at 12:22 Comment(0)
S
16

TabLayoutMediator is what you need. Just set smoothScroll to 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

Starvation answered 25/6, 2020 at 16:19 Comment(0)
D
0

I think viewpager2.setPageTransformer(null) might give you what you need

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.

Duello answered 19/4, 2020 at 11:56 Comment(1)
this doesn't work, because Setting a null transformer will restore data-set change animations.Jeep

© 2022 - 2024 — McMap. All rights reserved.