Fix reader tap zones triggering after scrolling was stopped by the user (#2518)

Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
This commit is contained in:
Naputt1
2025-11-02 14:39:42 +07:00
committed by GitHub
parent cc28776735
commit ac28b6c80c
2 changed files with 14 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon
import android.animation.AnimatorSet
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.HapticFeedbackConstants
@@ -34,6 +35,10 @@ class WebtoonRecyclerView @JvmOverloads constructor(
private var firstVisibleItemPosition = 0
private var lastVisibleItemPosition = 0
private var currentScale = DEFAULT_RATE
private var isScrolling = false
private var hasTappedWhileScrolling = false
var zoomOutDisabled = false
set(value) {
field = value
@@ -62,7 +67,11 @@ class WebtoonRecyclerView @JvmOverloads constructor(
super.onMeasure(widthSpec, heightSpec)
}
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(e: MotionEvent): Boolean {
if (e.actionMasked == MotionEvent.ACTION_DOWN) {
hasTappedWhileScrolling = isScrolling
}
detector.onTouchEvent(e)
return super.onTouchEvent(e)
}
@@ -82,6 +91,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
val totalItemCount = layoutManager?.itemCount ?: 0
atLastPosition = visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1
atFirstPosition = firstVisibleItemPosition == 0
isScrolling = state != SCROLL_STATE_IDLE
}
private fun getPositionX(positionX: Float): Float {
@@ -215,7 +225,9 @@ class WebtoonRecyclerView @JvmOverloads constructor(
inner class GestureListener : GestureDetectorWithLongTap.Listener() {
override fun onSingleTapConfirmed(ev: MotionEvent): Boolean {
tapListener?.invoke(ev)
if (!hasTappedWhileScrolling) {
tapListener?.invoke(ev)
}
return false
}