Viewpager2 жест смахивания только по горизонтали Android - PullRequest
0 голосов
/ 30 марта 2020

Как я могу предотвратить диагональное перелистывание на Viewpager2, разрешить перелистывание, только если жест строго горизонтальный.

Я не хочу этого

Я хочу это

1 Ответ

0 голосов
/ 31 марта 2020

Вот как это работает

источник от Средний

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