diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt index 1f46e1dfa..914420fe2 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt @@ -10,12 +10,12 @@ import android.view.animation.DecelerateInterpolator import android.widget.Scroller import androidx.annotation.CallSuper import com.google.android.material.snackbar.Snackbar +import io.legado.app.R import io.legado.app.help.AppConfig import io.legado.app.help.ReadBookConfig import io.legado.app.ui.book.read.page.ContentView import io.legado.app.ui.book.read.page.PageView import kotlin.math.abs -import io.legado.app.R abstract class PageDelegate(protected val pageView: PageView) : GestureDetector.SimpleOnGestureListener() { @@ -24,6 +24,7 @@ abstract class PageDelegate(protected val pageView: PageView) : pageView.width * 0.66f, pageView.height * 0.66f ) protected val context: Context = pageView.context + private val animationSpeed = 300 //起始点 protected var startX: Float = 0f @@ -115,13 +116,12 @@ abstract class PageDelegate(protected val pageView: PageView) : } protected fun startScroll(startX: Int, startY: Int, dx: Int, dy: Int) { - scroller.startScroll( - startX, - startY, - dx, - dy, - if (dx != 0) (abs(dx) * 0.3).toInt() else (abs(dy) * 0.3).toInt() - ) + val duration = if (dx != 0) { + (animationSpeed * abs(dx)) / viewWidth + } else { + (animationSpeed * abs(dy)) / viewHeight + } + scroller.startScroll(startX, startY, dx, dy, duration) isRunning = true isStarted = true pageView.invalidate() diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt index c5df5c9dd..c812da0e5 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt @@ -127,7 +127,7 @@ object ChapterProvider { when (imageStyle?.toUpperCase()) { "FULL" -> { width = visibleWidth - height = it.width / width * it.height + height = it.height * visibleWidth / it.width } else -> { if (it.width > visibleWidth) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt index 76d772edd..6be688518 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt @@ -10,10 +10,11 @@ import io.legado.app.utils.FileUtils import io.legado.app.utils.MD5Utils import io.legado.app.utils.externalFilesDir import java.io.FileOutputStream +import java.util.concurrent.ConcurrentHashMap object ImageProvider { - private val cache = hashMapOf>() + private val cache = ConcurrentHashMap>() @Synchronized fun getCache(chapterIndex: Int, src: String): Bitmap? { @@ -24,7 +25,7 @@ object ImageProvider { fun setCache(chapterIndex: Int, src: String, bitmap: Bitmap) { var indexCache = cache[chapterIndex] if (indexCache == null) { - indexCache = hashMapOf() + indexCache = ConcurrentHashMap() cache[chapterIndex] = indexCache } indexCache[src] = bitmap