Viewpager2 仅水平滑动手势 Android

Viewpager2 swipe gesture only horizontally Android

如何防止在 Viewpager2 上对角滑动,只有在手势严格水平时才允许滑动。

I dot not want this

I want this

这是如何工作的

来自 Medium

 fun ViewPager2.reduceDragSensitivity() {
    val recyclerViewField = ViewPager2::class.java.getDeclaredField("mRecyclerView")
    recyclerViewField.isAccessible = true
    val recyclerView = recyclerViewField.get(this) as RecyclerView
    val touchSlopField = RecyclerView::class.java.getDeclaredField("mTouchSlop")
    touchSlopField.isAccessible = true
    val touchSlop = touchSlopField.get(recyclerView) as Int
    touchSlopField.set(recyclerView, touchSlop*3)
}

另外你必须有这样的Recyclerview

 <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layerType="hardware"
        android:orientation="vertical"
        android:overScrollMode="never"
        android:scrollbars="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">


        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerArtist"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:clipToPadding="false"
            android:layerType="hardware"
            android:orientation="vertical"
            android:overScrollMode="never" />


    </androidx.core.widget.NestedScrollView>

还有

ViewCompat.setNestedScrollingEnabled(recyclerView,false)