From 0b828581ca0c138d668e2c3b0dbc4dbccfb8694b Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Fri, 22 Sep 2023 17:19:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/read/page/delegate/CoverPageDelegate.kt | 9 +++------ .../read/page/delegate/HorizontalPageDelegate.kt | 14 ++++++-------- .../read/page/delegate/NoAnimPageDelegate.kt | 4 ++++ .../java/io/legado/app/utils/ViewExtensions.kt | 16 +++++++++++++--- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/CoverPageDelegate.kt b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/CoverPageDelegate.kt index 2c9a767aa..1b92f160c 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/CoverPageDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/CoverPageDelegate.kt @@ -58,14 +58,11 @@ class CoverPageDelegate(readView: ReadView) : HorizontalPageDelegate(readView) { override fun setBitmap() { when (mDirection) { PageDirection.PREV -> { - prevBitmap?.recycle() - prevBitmap = prevPage.screenshot() + prevBitmap = prevPage.screenshot(prevBitmap, canvas) } PageDirection.NEXT -> { - nextBitmap?.recycle() - nextBitmap = nextPage.screenshot() - curBitmap?.recycle() - curBitmap = curPage.screenshot() + nextBitmap = nextPage.screenshot(nextBitmap, canvas) + curBitmap = curPage.screenshot(curBitmap, canvas) } else -> Unit } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/HorizontalPageDelegate.kt b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/HorizontalPageDelegate.kt index addaaddb2..70fe1a97d 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/HorizontalPageDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/HorizontalPageDelegate.kt @@ -1,6 +1,7 @@ package io.legado.app.ui.book.read.page.delegate import android.graphics.Bitmap +import android.graphics.Canvas import android.view.MotionEvent import io.legado.app.ui.book.read.page.ReadView import io.legado.app.ui.book.read.page.entities.PageDirection @@ -11,6 +12,7 @@ abstract class HorizontalPageDelegate(readView: ReadView) : PageDelegate(readVie protected var curBitmap: Bitmap? = null protected var prevBitmap: Bitmap? = null protected var nextBitmap: Bitmap? = null + protected var canvas: Canvas = Canvas() private val slopSquare by lazy { readView.slopSquare * readView.slopSquare } override fun setDirection(direction: PageDirection) { @@ -21,17 +23,13 @@ abstract class HorizontalPageDelegate(readView: ReadView) : PageDelegate(readVie open fun setBitmap() { when (mDirection) { PageDirection.PREV -> { - prevBitmap?.recycle() - prevBitmap = prevPage.screenshot() - curBitmap?.recycle() - curBitmap = curPage.screenshot() + prevBitmap = prevPage.screenshot(prevBitmap, canvas) + curBitmap = curPage.screenshot(curBitmap, canvas) } PageDirection.NEXT -> { - nextBitmap?.recycle() - nextBitmap = nextPage.screenshot() - curBitmap?.recycle() - curBitmap = curPage.screenshot() + nextBitmap = nextPage.screenshot(nextBitmap, canvas) + curBitmap = curPage.screenshot(curBitmap, canvas) } else -> Unit diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/NoAnimPageDelegate.kt b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/NoAnimPageDelegate.kt index 9809a4f71..aaaa072d4 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/NoAnimPageDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/NoAnimPageDelegate.kt @@ -12,6 +12,10 @@ class NoAnimPageDelegate(readView: ReadView) : HorizontalPageDelegate(readView) stopScroll() } + override fun setBitmap() { + // nothing + } + override fun onDraw(canvas: Canvas) { // nothing } diff --git a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt index cc8e6cd94..473bc3a17 100644 --- a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt @@ -6,6 +6,7 @@ import android.annotation.SuppressLint import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas +import android.graphics.Color import android.os.Build import android.text.Html import android.view.MotionEvent @@ -133,12 +134,21 @@ fun View.visible(visible: Boolean) { } } -fun View.screenshot(): Bitmap? { +fun View.screenshot(bitmap: Bitmap? = null, canvas: Canvas? = null): Bitmap? { return if (width > 0 && height > 0) { - val screenshot = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) - val c = Canvas(screenshot) + val screenshot = if (bitmap != null && bitmap.width == width && bitmap.height == height) { + bitmap.eraseColor(Color.TRANSPARENT) + bitmap + } else { + bitmap?.recycle() + Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + } + val c = canvas ?: Canvas() + c.setBitmap(screenshot) + c.save() c.translate(-scrollX.toFloat(), -scrollY.toFloat()) this.draw(c) + c.restore() c.setBitmap(null) screenshot.prepareToDraw() screenshot