【问题标题】:Remove ViewPager2 Overscroll animation移除 ViewPager2 Overscroll 动画
【发布时间】:2019-11-14 15:53:48
【问题描述】:

找不到移除 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"/>
binding.viewPager.apply {
        adapter = adapter
        orientation = ViewPager2.ORIENTATION_VERTICAL
        overScrollMode = ViewPager2.OVER_SCROLL_NEVER
        offscreenPageLimit = if (containsVideo) 2 else 5
}

【问题讨论】:

标签: android kotlin android-viewpager2


【解决方案1】:

解决方案

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

【讨论】:

  • 请提供无数据绑定的解决方案
  • @galaxigirl findViewById(R.id.viewPagerIdFromLayout).apply { (getChildAt(0) as? RecyclerView)?.overScrollMode = RecyclerView.OVER_SCROLL_NEVER }
  • 不确定这个答案最初是什么时候写的,但目前overScrollMode 和OVER_SCROLL_NEVER 是View 上的函数/常量,而不是RecyclerView。所以答案减少到fun ViewPager2.disableOverscroll() {getChildAt(0).overScrollMode = View.OVER_SCROLL_NEVER}
【解决方案2】:

万一有人在寻找 Java 解决方案

View child = viewPager2.getChildAt(0);
if (child instanceof RecyclerView) {
    child.setOverScrollMode(View.OVER_SCROLL_NEVER);
}

【讨论】:

    【解决方案3】:

    作为 Kotlin 扩展:

    fun ViewPager2.removeOverScroll() {
        (getChildAt(0) as? RecyclerView)?.overScrollMode = View.OVER_SCROLL_NEVER
    }
    

    并且您正在片段/活动中使用它:

    viewPager.removeOverScroll()
    

    【讨论】:

      【解决方案4】:

      这个对我有用:

      val child = binding.<your viewPager camelCase id>.getChildAt(0)
          (child as? RecyclerView)?.overScrollMode = View.OVER_SCROLL_NEVER
      

      【讨论】:

        【解决方案5】:

        在我的项目中工作的我的 kotlin 代码版本,没有绑定:

        // over scroll animation
        val child: View = pager.getChildAt(0)
        
        if (child is RecyclerView) {
            child.overScrollMode = View.OVER_SCROLL_NEVER
        }
        

        谢谢。

        【讨论】:

          【解决方案6】:

          使用 android:overScrollMode="never"

           <androidx.viewpager2.widget.ViewPager2
                  android:id="@+id/infoViewPager"
                  android:layout_width="match_parent"
                  android:layout_height="0dp"
                  android:overScrollMode="never"
                  app:layout_constraintBottom_toTopOf="@id/guideLine1"
                  app:layout_constraintEnd_toEndOf="parent"
                  app:layout_constraintStart_toStartOf="parent"
                  />
          

          【讨论】:

            猜你喜欢
            • 2013-05-01
            • 2020-05-25
            • 1970-01-01
            • 2023-02-01
            • 2016-07-07
            • 2016-02-06
            • 2012-01-23
            • 2012-05-08
            • 1970-01-01
            相关资源
            最近更新 更多