@@ -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.entities.TextPos
|
||||||
import io.legado.app.ui.book.read.page.provider.ChapterProvider
|
import io.legado.app.ui.book.read.page.provider.ChapterProvider
|
||||||
import io.legado.app.ui.book.read.page.provider.TextPageFactory
|
import io.legado.app.ui.book.read.page.provider.TextPageFactory
|
||||||
import io.legado.app.utils.activity
|
import io.legado.app.utils.*
|
||||||
import io.legado.app.utils.invisible
|
|
||||||
import io.legado.app.utils.screenshot
|
|
||||||
import io.legado.app.utils.showDialogFragment
|
|
||||||
import java.text.BreakIterator
|
import java.text.BreakIterator
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
@@ -184,6 +181,10 @@ class ReadView(context: Context, attrs: AttributeSet) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//在多点触控时,事件不走ACTION_DOWN分支而产生的特殊事件处理
|
||||||
|
if (event.actionMasked == MotionEvent.ACTION_POINTER_DOWN || event.actionMasked == MotionEvent.ACTION_POINTER_UP){
|
||||||
|
pageDelegate?.onTouch(event)
|
||||||
|
}
|
||||||
when (event.action) {
|
when (event.action) {
|
||||||
MotionEvent.ACTION_DOWN -> {
|
MotionEvent.ACTION_DOWN -> {
|
||||||
callBack.screenOffTimerStart()
|
callBack.screenOffTimerStart()
|
||||||
|
|||||||
@@ -33,6 +33,15 @@ class ScrollPageDelegate(readView: ReadView) : PageDelegate(readView) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onTouch(event: MotionEvent) {
|
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) {
|
when (event.action) {
|
||||||
MotionEvent.ACTION_DOWN -> {
|
MotionEvent.ACTION_DOWN -> {
|
||||||
abortAnim()
|
abortAnim()
|
||||||
@@ -58,26 +67,14 @@ class ScrollPageDelegate(readView: ReadView) : PageDelegate(readView) {
|
|||||||
private fun onScroll(event: MotionEvent) {
|
private fun onScroll(event: MotionEvent) {
|
||||||
mVelocity.addMovement(event)
|
mVelocity.addMovement(event)
|
||||||
mVelocity.computeCurrentVelocity(velocityDuration)
|
mVelocity.computeCurrentVelocity(velocityDuration)
|
||||||
val action: Int = event.action
|
//取最后添加(即最新的)一个触摸点来计算滚动位置
|
||||||
val pointerUp =
|
//多点触控时即最后按下的手指产生的事件点
|
||||||
action and MotionEvent.ACTION_MASK == MotionEvent.ACTION_POINTER_UP
|
val pointX = event.getX(event.pointerCount - 1)
|
||||||
val skipIndex = if (pointerUp) event.actionIndex else -1
|
val pointY = event.getY(event.pointerCount - 1)
|
||||||
// Determine focal point
|
readView.setTouchPoint(pointX, pointY)
|
||||||
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)
|
|
||||||
if (!isMoved) {
|
if (!isMoved) {
|
||||||
val deltaX = (focusX - startX).toInt()
|
val deltaX = (pointX - startX).toInt()
|
||||||
val deltaY = (focusY - startY).toInt()
|
val deltaY = (pointY - startY).toInt()
|
||||||
val distance = deltaX * deltaX + deltaY * deltaY
|
val distance = deltaX * deltaX + deltaY * deltaY
|
||||||
isMoved = distance > readView.slopSquare
|
isMoved = distance > readView.slopSquare
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user