Forráskód Böngészése

优化翻页动画

kunfei 4 éve
szülő
commit
eac8a4eeb8

+ 15 - 0
app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt

@@ -2,6 +2,7 @@ package io.legado.app.ui.book.read.page
 
 import android.annotation.SuppressLint
 import android.content.Context
+import android.graphics.Bitmap
 import android.graphics.drawable.Drawable
 import android.view.LayoutInflater
 import android.widget.FrameLayout
@@ -13,6 +14,7 @@ import io.legado.app.data.entities.Bookmark
 import io.legado.app.databinding.ViewBookPageBinding
 import io.legado.app.help.config.ReadBookConfig
 import io.legado.app.help.config.ReadTipConfig
+import io.legado.app.help.coroutine.Coroutine
 import io.legado.app.model.ReadBook
 import io.legado.app.ui.book.read.ReadBookActivity
 import io.legado.app.ui.book.read.page.entities.TextPage
@@ -41,6 +43,9 @@ class PageView(context: Context) : FrameLayout(context) {
     private var tvTimeBattery: BatteryView? = null
     private var tvTimeBatteryP: BatteryView? = null
 
+    var bitmap: Bitmap? = null
+        private set
+
     val headerHeight: Int
         get() {
             val h1 = if (ReadBookConfig.hideStatusBar) 0 else context.statusBarHeight
@@ -59,6 +64,14 @@ class PageView(context: Context) : FrameLayout(context) {
         }
     }
 
+    private fun upBitmap() {
+        Coroutine.async {
+            val screenshot = screenshot()
+            bitmap?.recycle()
+            bitmap = screenshot
+        }
+    }
+
     fun upStyle() = binding.run {
         upTipStyle()
         ReadBookConfig.let {
@@ -225,6 +238,7 @@ class PageView(context: Context) : FrameLayout(context) {
         val time = timeFormat.format(Date(System.currentTimeMillis()))
         tvTimeBattery?.setBattery(battery, time)
         tvTimeBatteryP?.text = "$time $battery%"
+        upBitmap()
     }
 
     fun setContent(textPage: TextPage, resetPageOffset: Boolean = true) {
@@ -233,6 +247,7 @@ class PageView(context: Context) : FrameLayout(context) {
             resetPageOffset()
         }
         binding.contentTextView.setContent(textPage)
+        upBitmap()
     }
 
     fun setContentDescription(content: String) {

+ 4 - 5
app/src/main/java/io/legado/app/ui/book/read/page/delegate/HorizontalPageDelegate.kt

@@ -4,7 +4,6 @@ import android.graphics.Bitmap
 import android.view.MotionEvent
 import io.legado.app.ui.book.read.page.ReadView
 import io.legado.app.ui.book.read.page.entities.PageDirection
-import io.legado.app.utils.screenshot
 
 abstract class HorizontalPageDelegate(readView: ReadView) : PageDelegate(readView) {
 
@@ -21,15 +20,15 @@ abstract class HorizontalPageDelegate(readView: ReadView) : PageDelegate(readVie
         when (mDirection) {
             PageDirection.PREV -> {
                 prevBitmap?.recycle()
-                prevBitmap = prevPage.screenshot()
+                prevBitmap = prevPage.bitmap?.copy(Bitmap.Config.ARGB_8888, false)
                 curBitmap?.recycle()
-                curBitmap = curPage.screenshot()
+                curBitmap = curPage.bitmap?.copy(Bitmap.Config.ARGB_8888, false)
             }
             PageDirection.NEXT -> {
                 nextBitmap?.recycle()
-                nextBitmap = nextPage.screenshot()
+                nextBitmap = nextPage.bitmap?.copy(Bitmap.Config.ARGB_8888, false)
                 curBitmap?.recycle()
-                curBitmap = curPage.screenshot()
+                curBitmap = curPage.bitmap?.copy(Bitmap.Config.ARGB_8888, false)
             }
             else -> Unit
         }