移除 ViewPager2 Overscroll 动画
Posted
技术标签:
【中文标题】移除 ViewPager2 Overscroll 动画【英文标题】:Remove ViewPager2 Overscroll animation 【发布时间】:2019-11-14 15:53:48 【问题描述】:找不到移除 ViewPager2 过度滚动阴影动画的方法。 我知道在 ViewPager 上,您可以直接将 overscrollMode 属性设置为 never,但是,它不适用于 ViewPager2
已经尝试了以下
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_
android:layout_
android:overScrollMode="never"/>
binding.viewPager.apply
adapter = adapter
orientation = ViewPager2.ORIENTATION_VERTICAL
overScrollMode = ViewPager2.OVER_SCROLL_NEVER
offscreenPageLimit = if (containsVideo) 2 else 5
【问题讨论】:
ViewPager2 可能没有将 overScrollMode 转发到它在内部使用的 RecyclerView。可以file a feature request吗? @ianhanniballake 马上归档,谢谢 issuetracker.google.com/issues/134912610 只是在这个小问题上浪费了很多时间,这个问题及其答案值得更多关注! 【参考方案1】:解决方案
binding.viewPager2.apply
adapter = vpAdapter
orientation = ViewPager2.ORIENTATION_VERTICAL
registerOnPageChangeCallback(pageChangeCallback)
(getChildAt(0) as RecyclerView).overScrollMode = RecyclerView.OVER_SCROLL_NEVER
【讨论】:
请提供无数据绑定的解决方案 @galaxigirlfindViewById(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_
android:layout_
android:overScrollMode="never"
app:layout_constraintBottom_toTopOf="@id/guideLine1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
/>
【讨论】:
以上是关于移除 ViewPager2 Overscroll 动画的主要内容,如果未能解决你的问题,请参考以下文章