From ed35e1749ffc8d171e96f545a4e4463e81d44746 Mon Sep 17 00:00:00 2001 From: jaredtech Date: Thu, 30 Mar 2023 12:20:40 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E9=98=85=E8=AF=BB?= =?UTF-8?q?=E6=97=B6,=E5=A4=9A=E6=8C=87=E8=A7=A6=E6=91=B8=E9=80=A0?= =?UTF-8?q?=E6=88=90=E9=97=AA=E7=83=81=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../read/page/delegate/ScrollPageDelegate.kt | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt index c3f9dc558..fcbe852f4 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt @@ -58,26 +58,10 @@ class ScrollPageDelegate(readView: ReadView) : PageDelegate(readView) { private fun onScroll(event: MotionEvent) { mVelocity.addMovement(event) mVelocity.computeCurrentVelocity(velocityDuration) - val action: Int = event.action - val pointerUp = - action and MotionEvent.ACTION_MASK == MotionEvent.ACTION_POINTER_UP - val skipIndex = if (pointerUp) event.actionIndex else -1 - // Determine focal point - var sumX = 0f - var sumY = 0f - val count: Int = event.pointerCount - for (i in 0 until count) { - if (skipIndex == i) continue - sumX += event.getX(i) - sumY += event.getY(i) - } - val div = if (pointerUp) count - 1 else count - val focusX = sumX / div - val focusY = sumY / div - readView.setTouchPoint(sumX, sumY) + readView.setTouchPoint(event.getX(0), event.getY(0)) if (!isMoved) { - val deltaX = (focusX - startX).toInt() - val deltaY = (focusY - startY).toInt() + val deltaX = (event.getX(0) - startX).toInt() + val deltaY = (event.getY(0) - startY).toInt() val distance = deltaX * deltaX + deltaY * deltaY isMoved = distance > readView.slopSquare } From 982a0d8e45a7f464240fabf51d4769ee05b958d6 Mon Sep 17 00:00:00 2001 From: jaredtech Date: Thu, 30 Mar 2023 15:31:30 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E9=98=85=E8=AF=BB?= =?UTF-8?q?=E6=97=B6,=E5=A4=9A=E6=8C=87=E8=A7=A6=E6=91=B8=E9=80=A0?= =?UTF-8?q?=E6=88=90=E9=97=AA=E7=83=81=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/book/read/page/ReadView.kt | 14 ++++++++++---- .../book/read/page/delegate/ScrollPageDelegate.kt | 10 +++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt index 517ca7392..7ef3f5c84 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt @@ -27,10 +27,7 @@ import io.legado.app.ui.book.read.page.entities.TextPage import io.legado.app.ui.book.read.page.entities.TextPos import io.legado.app.ui.book.read.page.provider.ChapterProvider import io.legado.app.ui.book.read.page.provider.TextPageFactory -import io.legado.app.utils.activity -import io.legado.app.utils.invisible -import io.legado.app.utils.screenshot -import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.* import java.text.BreakIterator import java.util.* import kotlin.math.abs @@ -184,6 +181,15 @@ class ReadView(context: Context, attrs: AttributeSet) : } } + //在多点触控时,事件不走ACTION_DOWN分支而产生的特殊事件处理 + if (event.actionMasked == MotionEvent.ACTION_POINTER_DOWN){ + //当多个手指同时按下的情况,将最后一个按下的手指的坐标设置为起始坐标,所以只有最后一个手指的滑动事件被处理 + setStartPoint(event.getX(event.pointerCount - 1), event.getY(event.pointerCount - 1), false) + } else if(event.actionMasked == MotionEvent.ACTION_POINTER_UP){ + //当多个手指同时按下的情况,当抬起一个手指时,起始坐标恢复为第一次按下的手指的坐标 + setStartPoint(event.x, event.y, false) + return true + } when (event.action) { MotionEvent.ACTION_DOWN -> { callBack.screenOffTimerStart() diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt index fcbe852f4..dea3f99d1 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt @@ -58,10 +58,14 @@ class ScrollPageDelegate(readView: ReadView) : PageDelegate(readView) { private fun onScroll(event: MotionEvent) { mVelocity.addMovement(event) mVelocity.computeCurrentVelocity(velocityDuration) - readView.setTouchPoint(event.getX(0), event.getY(0)) + //取最后添加(即最新的)一个触摸点来计算滚动位置 + //多点触控时即最后按下的手指产生的事件点 + val pointX = event.getX(event.pointerCount - 1) + val pointY = event.getY(event.pointerCount - 1) + readView.setTouchPoint(pointX, pointY) if (!isMoved) { - val deltaX = (event.getX(0) - startX).toInt() - val deltaY = (event.getY(0) - startY).toInt() + val deltaX = (pointX - startX).toInt() + val deltaY = (pointY - startY).toInt() val distance = deltaX * deltaX + deltaY * deltaY isMoved = distance > readView.slopSquare } From bbb9fe2c0fa911943f9d0893281b46f36c0520c1 Mon Sep 17 00:00:00 2001 From: jaredtech Date: Thu, 30 Mar 2023 15:44:15 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E9=98=85=E8=AF=BB?= =?UTF-8?q?=E6=97=B6,=E5=A4=9A=E6=8C=87=E8=A7=A6=E6=91=B8=E9=80=A0?= =?UTF-8?q?=E6=88=90=E9=97=AA=E7=83=81=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/read/page/ReadView.kt | 9 ++------- .../app/ui/book/read/page/delegate/ScrollPageDelegate.kt | 9 +++++++++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt index 7ef3f5c84..d3d1db433 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt @@ -182,13 +182,8 @@ class ReadView(context: Context, attrs: AttributeSet) : } //在多点触控时,事件不走ACTION_DOWN分支而产生的特殊事件处理 - if (event.actionMasked == MotionEvent.ACTION_POINTER_DOWN){ - //当多个手指同时按下的情况,将最后一个按下的手指的坐标设置为起始坐标,所以只有最后一个手指的滑动事件被处理 - setStartPoint(event.getX(event.pointerCount - 1), event.getY(event.pointerCount - 1), false) - } else if(event.actionMasked == MotionEvent.ACTION_POINTER_UP){ - //当多个手指同时按下的情况,当抬起一个手指时,起始坐标恢复为第一次按下的手指的坐标 - setStartPoint(event.x, event.y, false) - return true + if (event.actionMasked == MotionEvent.ACTION_POINTER_DOWN || event.actionMasked == MotionEvent.ACTION_POINTER_UP){ + pageDelegate?.onTouch(event) } when (event.action) { MotionEvent.ACTION_DOWN -> { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt index dea3f99d1..381991193 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt @@ -33,6 +33,15 @@ class ScrollPageDelegate(readView: ReadView) : PageDelegate(readView) { } override fun onTouch(event: MotionEvent) { + //在多点触控时,事件不走ACTION_DOWN分支而产生的特殊事件处理 + if (event.actionMasked == MotionEvent.ACTION_POINTER_DOWN){ + //当多个手指同时按下的情况,将最后一个按下的手指的坐标设置为起始坐标,所以只有最后一个手指的滑动事件被处理 + readView.setStartPoint(event.getX(event.pointerCount - 1), event.getY(event.pointerCount - 1), false) + } else if(event.actionMasked == MotionEvent.ACTION_POINTER_UP){ + //当多个手指同时按下的情况,当抬起一个手指时,起始坐标恢复为第一次按下的手指的坐标 + readView.setStartPoint(event.x, event.y, false) + return + } when (event.action) { MotionEvent.ACTION_DOWN -> { abortAnim()