diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt index d2bd2b865..062384559 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt @@ -41,6 +41,7 @@ class PageView(context: Context) : FrameLayout(context) { private var tvBookName: BatteryView? = null private var tvTimeBattery: BatteryView? = null private var tvTimeBatteryP: BatteryView? = null + private var bitmap: Bitmap? = null val headerHeight: Int get() { @@ -61,7 +62,12 @@ class PageView(context: Context) : FrameLayout(context) { } fun getBitmap(): Bitmap? { - return drawingCache?.copy(Bitmap.Config.ARGB_8888, false) + return bitmap?.copy(Bitmap.Config.ARGB_8888, false) + } + + private fun upBitmap() { + bitmap?.recycle() + bitmap = screenshot() } fun upStyle() = binding.run { @@ -230,8 +236,7 @@ class PageView(context: Context) : FrameLayout(context) { val time = timeFormat.format(Date(System.currentTimeMillis())) tvTimeBattery?.setBattery(battery, time) tvTimeBatteryP?.text = "$time $battery%" - destroyDrawingCache() - buildDrawingCache() + upBitmap() } fun setContent(textPage: TextPage, resetPageOffset: Boolean = true) { @@ -240,8 +245,7 @@ class PageView(context: Context) : FrameLayout(context) { resetPageOffset() } binding.contentTextView.setContent(textPage) - destroyDrawingCache() - buildDrawingCache() + upBitmap() } fun setContentDescription(content: String) { 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 acd723022..271c5322b 100644 --- a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt @@ -126,14 +126,13 @@ fun View.visible(visible: Boolean) { } } -fun View.screenshot(): Bitmap? { - return runCatching { - val screenshot = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) - val c = Canvas(screenshot) - c.translate(-scrollX.toFloat(), -scrollY.toFloat()) - draw(c) - screenshot - }.getOrNull() +fun View.screenshot(): Bitmap { + val screenshot = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + val c = Canvas(screenshot) + c.translate(-scrollX.toFloat(), -scrollY.toFloat()) + this.draw(c) + c.setBitmap(null) + return screenshot } fun SeekBar.progressAdd(int: Int) {