parent
fc318d2579
commit
ed5492536d
@ -1,22 +1,65 @@ |
|||||||
package io.legado.app.ui.widget.page.delegate |
package io.legado.app.ui.widget.page.delegate |
||||||
|
|
||||||
import android.graphics.Canvas |
import android.graphics.Canvas |
||||||
|
import android.graphics.Matrix |
||||||
import io.legado.app.ui.widget.page.PageView |
import io.legado.app.ui.widget.page.PageView |
||||||
|
|
||||||
class SlidePageDelegate(pageView: PageView) : PageDelegate(pageView) { |
class SlidePageDelegate(pageView: PageView) : PageDelegate(pageView) { |
||||||
|
|
||||||
|
private val bitmapMatrix = Matrix() |
||||||
|
|
||||||
override fun onScrollStart() { |
override fun onScrollStart() { |
||||||
|
val distanceX: Float |
||||||
|
when (direction) { |
||||||
|
Direction.NEXT -> if (isCancel) { |
||||||
|
var dis = viewWidth - startX + touchX |
||||||
|
if (dis > viewWidth) { |
||||||
|
dis = viewWidth.toFloat() |
||||||
|
} |
||||||
|
distanceX = viewWidth - dis |
||||||
|
} else { |
||||||
|
distanceX = -(touchX + (viewWidth - startX)) |
||||||
|
} |
||||||
|
else -> distanceX = if (isCancel) { |
||||||
|
-(touchX - startX) |
||||||
|
} else { |
||||||
|
viewWidth - (touchX - startX) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
scroller.startScroll(touchX.toInt(), 0, distanceX.toInt(), 0, getDuration(distanceX)) |
||||||
|
start() |
||||||
} |
} |
||||||
|
|
||||||
override fun onDraw(canvas: Canvas) { |
override fun onDraw(canvas: Canvas) { |
||||||
|
val offsetX = touchX - startX |
||||||
|
|
||||||
|
if ((direction == Direction.NEXT && offsetX > 0) |
||||||
|
|| (direction == Direction.PREV && offsetX < 0) |
||||||
|
) return |
||||||
|
|
||||||
|
val distanceX = if (offsetX > 0) offsetX - viewWidth else offsetX + viewWidth |
||||||
|
bitmap?.let { |
||||||
|
bitmapMatrix.setTranslate(distanceX, 0.toFloat()) |
||||||
|
canvas.drawBitmap(it, bitmapMatrix, null) |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
override fun onScroll() { |
override fun onScroll() { |
||||||
|
val offsetX = touchX - startX |
||||||
|
|
||||||
|
if ((direction == Direction.NEXT && offsetX > 0) |
||||||
|
|| (direction == Direction.PREV && offsetX < 0) |
||||||
|
) return |
||||||
|
|
||||||
|
curPage?.translationX = offsetX |
||||||
} |
} |
||||||
|
|
||||||
override fun onScrollStop() { |
override fun onScrollStop() { |
||||||
|
curPage?.x = 0.toFloat() |
||||||
|
|
||||||
|
if (!isCancel) { |
||||||
|
pageView.fillPage(direction) |
||||||
|
} |
||||||
} |
} |
||||||
} |
} |
Loading…
Reference in new issue