feat: 优化代码

pull/111/head
kunfei 5 years ago
parent 9f0241d272
commit adb84229cc
  1. 43
      app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt
  2. 24
      app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt

@ -26,11 +26,14 @@ abstract class PageDelegate(protected val pageView: PageView) :
) )
protected val context: Context = pageView.context protected val context: Context = pageView.context
//起始点 //起始点
protected var startX: Float = 0.toFloat() protected var startX: Float = 0f
protected var startY: Float = 0.toFloat() protected var startY: Float = 0f
//上一个触碰点
protected var lastX: Float = 0f
protected var lastY: Float = 0f
//触碰点 //触碰点
protected var touchX: Float = 0.toFloat() protected var touchX: Float = 0f
protected var touchY: Float = 0.toFloat() protected var touchY: Float = 0f
protected val nextPage: ContentView protected val nextPage: ContentView
get() = pageView.nextPage get() = pageView.nextPage
@ -76,6 +79,10 @@ abstract class PageDelegate(protected val pageView: PageView) :
open fun setStartPoint(x: Float, y: Float, invalidate: Boolean = true) { open fun setStartPoint(x: Float, y: Float, invalidate: Boolean = true) {
startX = x startX = x
startY = y startY = y
lastX = x
lastY = y
touchX = x
touchY = y
if (invalidate) { if (invalidate) {
invalidate() invalidate()
@ -83,6 +90,8 @@ abstract class PageDelegate(protected val pageView: PageView) :
} }
open fun setTouchPoint(x: Float, y: Float, invalidate: Boolean = true) { open fun setTouchPoint(x: Float, y: Float, invalidate: Boolean = true) {
lastX = touchX
lastY = touchY
touchX = x touchX = x
touchY = y touchY = y
@ -101,6 +110,16 @@ abstract class PageDelegate(protected val pageView: PageView) :
pageView.invalidate() pageView.invalidate()
} }
open fun fling(
startX: Int, startY: Int, velocityX: Int, velocityY: Int,
minX: Int, maxX: Int, minY: Int, maxY: Int
) {
scroller.fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY)
isRunning = true
isStarted = true
invalidate()
}
protected fun startScroll(startX: Int, startY: Int, dx: Int, dy: Int) { protected fun startScroll(startX: Int, startY: Int, dx: Int, dy: Int) {
scroller.startScroll( scroller.startScroll(
startX, startX,
@ -331,20 +350,4 @@ abstract class PageDelegate(protected val pageView: PageView) :
NONE, PREV, NEXT NONE, PREV, NEXT
} }
fun MotionEvent.toAction(action: Int): MotionEvent {
return MotionEvent.obtain(
downTime,
eventTime,
action,
x,
y,
pressure,
size,
metaState,
xPrecision,
yPrecision,
deviceId,
edgeFlags
)
}
} }

@ -14,7 +14,11 @@ class ScrollPageDelegate(pageView: PageView) : PageDelegate(pageView) {
private val mVelocity: VelocityTracker = VelocityTracker.obtain() private val mVelocity: VelocityTracker = VelocityTracker.obtain()
override fun onAnimStart() { override fun onAnimStart() {
//惯性滚动
fling(
0, touchY.toInt(), 0, mVelocity.yVelocity.toInt(),
0, 0, -10 * viewHeight, 10 * viewHeight
)
} }
override fun onDraw(canvas: Canvas) { override fun onDraw(canvas: Canvas) {
@ -29,6 +33,7 @@ class ScrollPageDelegate(pageView: PageView) : PageDelegate(pageView) {
override fun onDown(e: MotionEvent): Boolean { override fun onDown(e: MotionEvent): Boolean {
mVelocity.clear() mVelocity.clear()
mVelocity.addMovement(e)
return super.onDown(e) return super.onDown(e)
} }
@ -38,12 +43,11 @@ class ScrollPageDelegate(pageView: PageView) : PageDelegate(pageView) {
distanceX: Float, distanceX: Float,
distanceY: Float distanceY: Float
): Boolean { ): Boolean {
mVelocity.addMovement(e2)
setTouchPoint(e2.x, e2.y)
if (!isMoved && abs(distanceX) < abs(distanceY)) { if (!isMoved && abs(distanceX) < abs(distanceY)) {
if (distanceY < 0) { if (distanceY < 0) {
if (atTop) { if (atTop) {
val event = e1.toAction(MotionEvent.ACTION_UP)
curPage.dispatchTouchEvent(event)
event.recycle()
//如果上一页不存在 //如果上一页不存在
if (!hasPrev()) { if (!hasPrev()) {
noNext = true noNext = true
@ -54,9 +58,6 @@ class ScrollPageDelegate(pageView: PageView) : PageDelegate(pageView) {
} }
} else { } else {
if (atBottom) { if (atBottom) {
val event = e1.toAction(MotionEvent.ACTION_UP)
curPage.dispatchTouchEvent(event)
event.recycle()
//如果不存在表示没有下一页了 //如果不存在表示没有下一页了
if (!hasNext()) { if (!hasNext()) {
noNext = true noNext = true
@ -81,6 +82,15 @@ class ScrollPageDelegate(pageView: PageView) : PageDelegate(pageView) {
return isMoved return isMoved
} }
override fun onFling(
e1: MotionEvent?,
e2: MotionEvent?,
velocityX: Float,
velocityY: Float
): Boolean {
mVelocity.addMovement(e2)
return super.onFling(e1, e2, velocityX, velocityY)
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()

Loading…
Cancel
Save