|
|
|
@ -3,9 +3,12 @@ package io.legado.app.ui.book.read.page.delegate |
|
|
|
|
import android.graphics.Canvas |
|
|
|
|
import android.view.MotionEvent |
|
|
|
|
import android.view.VelocityTracker |
|
|
|
|
import io.legado.app.help.book.isImage |
|
|
|
|
import io.legado.app.model.ReadBook |
|
|
|
|
import io.legado.app.ui.book.read.page.ReadView |
|
|
|
|
import io.legado.app.ui.book.read.page.provider.ChapterProvider |
|
|
|
|
|
|
|
|
|
@Suppress("UnnecessaryVariable") |
|
|
|
|
class ScrollPageDelegate(readView: ReadView) : PageDelegate(readView) { |
|
|
|
|
|
|
|
|
|
// 滑动追踪的时间 |
|
|
|
@ -102,7 +105,7 @@ class ScrollPageDelegate(readView: ReadView) : PageDelegate(readView) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
readView.setStartPoint(0f, 0f, false) |
|
|
|
|
startScroll(0, 0, 0, -ChapterProvider.visibleHeight, animationSpeed) |
|
|
|
|
startScroll(0, 0, 0, calcNextPageOffset(), animationSpeed) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun prevPageByAnim(animationSpeed: Int) { |
|
|
|
@ -110,6 +113,38 @@ class ScrollPageDelegate(readView: ReadView) : PageDelegate(readView) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
readView.setStartPoint(0f, 0f, false) |
|
|
|
|
startScroll(0, 0, 0, ChapterProvider.visibleHeight, animationSpeed) |
|
|
|
|
startScroll(0, 0, 0, calcPrevPageOffset(), animationSpeed) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 计算点击翻页保留一行的滚动距离 |
|
|
|
|
* 图片页使用可视高度作为滚动距离 |
|
|
|
|
*/ |
|
|
|
|
private fun calcNextPageOffset(): Int { |
|
|
|
|
val visibleHeight = ChapterProvider.visibleHeight |
|
|
|
|
if (ReadBook.book?.isImage == true) { |
|
|
|
|
return -visibleHeight |
|
|
|
|
} |
|
|
|
|
val visiblePage = readView.getCurVisiblePage() |
|
|
|
|
if (visiblePage.isImageOrEmpty()) { |
|
|
|
|
return -visibleHeight |
|
|
|
|
} |
|
|
|
|
val lastLineTop = visiblePage.lines.last().lineTop.toInt() |
|
|
|
|
val offset = lastLineTop - ChapterProvider.paddingTop |
|
|
|
|
return -offset |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun calcPrevPageOffset(): Int { |
|
|
|
|
val visibleHeight = ChapterProvider.visibleHeight |
|
|
|
|
if (ReadBook.book?.isImage == true) { |
|
|
|
|
return visibleHeight |
|
|
|
|
} |
|
|
|
|
val visiblePage = readView.getCurVisiblePage() |
|
|
|
|
if (visiblePage.isImageOrEmpty()) { |
|
|
|
|
return visibleHeight |
|
|
|
|
} |
|
|
|
|
val firstLineBottom = visiblePage.lines.first().lineBottom.toInt() |
|
|
|
|
val offset = visibleHeight - (firstLineBottom - ChapterProvider.paddingTop) |
|
|
|
|
return offset |
|
|
|
|
} |
|
|
|
|
} |