Я создал версию Kotlin на основе преобразования этого ответа с Java: https://stackoverflow.com/a/13437997/8023278
Не существует встроенного способа отключения перелистывания между страницами ViewPager, требуется расширение ViewPager, которое переопределяет onTouchEvent и onInterceptTouchEvent, чтобы предотвратить действие пролистывания. Чтобы сделать его более универсальным, мы можем добавить метод setSwipePagingEnabled для включения / отключения перелистывания между страницами.
class SwipeLockableViewPager(context: Context, attrs: AttributeSet): ViewPager(context, attrs) {
private var swipeEnabled = false
override fun onTouchEvent(event: MotionEvent): Boolean {
return when (swipeEnabled) {
true -> super.onTouchEvent(event)
false -> false
}
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return when (swipeEnabled) {
true -> super.onInterceptTouchEvent(event)
false -> false
}
}
fun setSwipePagingEnabled(swipeEnabled: Boolean) {
this.swipeEnabled = swipeEnabled
}
}
Затем в нашем макете xml мы используем наш новый SwipeLockableViewPager вместо стандартного ViewPager
<mypackage.SwipeLockableViewPager
android:id="@+id/myViewPager"
android:layout_height="match_parent"
android:layout_width="match_parent" />
Теперь в нашей активности / фрагменте мы можем вызывать, myViewPager.setSwipePagingEnabled(false)
и пользователи не смогут перелистывать страницы
ОБНОВИТЬ
По состоянию на 2020 год у нас есть ViewPager2 . Если вы переходите на ViewPager2, есть встроенный метод отключения прокрутки:myViewPager2.isUserInputEnabled = false