diff --git a/app/src/main/java/io/legado/app/ui/widget/recycler/RecyclerViewAtViewPager2.kt b/app/src/main/java/io/legado/app/ui/widget/recycler/RecyclerViewAtViewPager2.kt new file mode 100644 index 000000000..79132f627 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/recycler/RecyclerViewAtViewPager2.kt @@ -0,0 +1,41 @@ +package io.legado.app.ui.widget.recycler + +import android.content.Context +import android.util.AttributeSet +import android.view.MotionEvent +import androidx.recyclerview.widget.RecyclerView +import kotlin.math.abs + +class RecyclerViewAtViewPager2(context: Context, attrs: AttributeSet?) : + RecyclerView(context, attrs) { + + private var startX: Int = 0 + private var startY: Int = 0 + + override fun dispatchTouchEvent(ev: MotionEvent): Boolean { + when (ev.action) { + MotionEvent.ACTION_DOWN -> { + startX = ev.x.toInt() + startY = ev.y.toInt() + parent.requestDisallowInterceptTouchEvent(true) + } + MotionEvent.ACTION_MOVE -> { + val endX = ev.x.toInt() + val endY = ev.y.toInt() + val disX = abs(endX - startX) + val disY = abs(endY - startY) + if (disX > disY) { + parent.requestDisallowInterceptTouchEvent(canScrollHorizontally(startX - endX)) + } else { + parent.requestDisallowInterceptTouchEvent(canScrollVertically(startY - endY)) + } + } + MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> parent.requestDisallowInterceptTouchEvent( + false + ) + } + return super.dispatchTouchEvent(ev) + } + + +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_books.xml b/app/src/main/res/layout/fragment_books.xml index 30f8ce74c..3eb83f71d 100644 --- a/app/src/main/res/layout/fragment_books.xml +++ b/app/src/main/res/layout/fragment_books.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> -