移除 ViewPager2 Overscroll 动画

Dan*_*Kim 14 android kotlin android-viewpager2

找不到删除 ViewPager2 过度滚动阴影动画的方法。我知道在 ViewPager 上,您可以直接将 overscrollMode 属性设置为 never,但是,它不适用于 ViewPager2

已经尝试了以下

<androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
    android:layout_height="match_parent"
        android:overScrollMode="never"/>
Run Code Online (Sandbox Code Playgroud)
binding.viewPager.apply {
        adapter = adapter
        orientation = ViewPager2.ORIENTATION_VERTICAL
        overScrollMode = ViewPager2.OVER_SCROLL_NEVER
        offscreenPageLimit = if (containsVideo) 2 else 5
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*Kim 26

解决方案

binding.viewPager2.apply {
    adapter = vpAdapter
    orientation = ViewPager2.ORIENTATION_VERTICAL
    registerOnPageChangeCallback(pageChangeCallback)
    (getChildAt(0) as RecyclerView).overScrollMode = RecyclerView.OVER_SCROLL_NEVER
}
Run Code Online (Sandbox Code Playgroud)

  • 不确定这个答案最初是什么时候写的,但目前“overScrollMode”和“OVER_SCROLL_NEVER”是“View”上的函数/常量,而不是“RecyclerView”。所以答案简化为 `fun ViewPager2.disableOverscroll() {getChildAt(0).overScrollMode = View.OVER_SCROLL_NEVER}` (3认同)
  • @galaxigirl `findViewById(R.id.viewPagerIdFromLayout).apply { (getChildAt(0) as?RecyclerView)?.overScrollMode = RecyclerView.OVER_SCROLL_NEVER }` (2认同)

Tre*_*urm 9

如果有人在寻找 Java 解决方案

View child = viewPager2.getChildAt(0);
if (child instanceof RecyclerView) {
    child.setOverScrollMode(View.OVER_SCROLL_NEVER);
}
Run Code Online (Sandbox Code Playgroud)