Просмотр исходного кода

Merge pull request #2016 from nEdAy/feature/mouse-wheel-page

新增 "鼠标滚轮翻页"
kunfei 4 лет назад
Родитель
Сommit
178c80e9a3

+ 57 - 0
app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt

@@ -67,6 +67,9 @@ import io.legado.app.ui.widget.dialog.TextDialog
 import io.legado.app.utils.*
 import kotlinx.coroutines.*
 import kotlinx.coroutines.Dispatchers.IO
+import java.util.*
+import kotlin.concurrent.timerTask
+
 
 class ReadBookActivity : BaseReadBookActivity(),
     View.OnTouchListener,
@@ -403,6 +406,32 @@ class ReadBookActivity : BaseReadBookActivity(),
         return super.dispatchKeyEvent(event)
     }
 
+    /**
+     * 鼠标滚轮事件
+     */
+    override fun onGenericMotionEvent(event: MotionEvent): Boolean {
+        if (0 != (event.source and InputDevice.SOURCE_CLASS_POINTER)) {
+            if (event.action == MotionEvent.ACTION_SCROLL) {
+                val axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL)
+                LogUtils.d("onGenericMotionEvent", "axisValue = $axisValue")
+                // 获得垂直坐标上的滚动方向
+                if (axisValue < 0.0f) { // 滚轮向下滚
+                    debounce {
+                        LogUtils.d("onGenericMotionEvent", "down")
+                        mouseWheelPage(PageDirection.NEXT)
+                    }
+                } else { // 滚轮向上滚
+                    debounce {
+                        LogUtils.d("onGenericMotionEvent", "up")
+                        mouseWheelPage(PageDirection.PREV)
+                    }
+                }
+                return true
+            }
+        }
+        return super.onGenericMotionEvent(event)
+    }
+
     /**
      * 按键事件
      */
@@ -635,6 +664,34 @@ class ReadBookActivity : BaseReadBookActivity(),
         readView.isTextSelected = false
     }
 
+    /**
+     * 防抖函数
+     */
+    private var timer: Timer? = null
+    private fun debounce(doThing: () -> Unit) {
+        timer?.cancel()
+        timer = Timer().apply {
+            schedule(timerTask {
+                doThing.invoke()
+                timer = null
+            }, 200)
+        }
+    }
+
+    /**
+     * 鼠标滚轮翻页
+     */
+    private fun mouseWheelPage(direction: PageDirection): Boolean {
+        if (!binding.readMenu.isVisible) {
+            if (getPrefBoolean("mouseWheelPage", true)) {
+                binding.readView.pageDelegate?.isCancel = false
+                binding.readView.pageDelegate?.keyTurnPage(direction)
+                return true
+            }
+        }
+        return false
+    }
+
     /**
      * 音量键翻页
      */

+ 1 - 0
app/src/main/res/values-es-rES/strings.xml

@@ -192,6 +192,7 @@
     <string name="img_cover">Portada</string>
     <string name="book">Libro</string>
     <string name="volume_key_page">Botones de volumen para pasar página</string>
+    <string name="mouse_wheel_page">Rueda del ratón para pasar página</string>
     <string name="click_turn_page">Toque la pantalla para pasar página</string>
     <string name="page_anim">Animación de hojeada</string>
     <string name="book_page_anim">Animación de hojeada (libro)</string>

+ 1 - 0
app/src/main/res/values-ja-rJP/strings.xml

@@ -196,6 +196,7 @@
     <string name="img_cover">Cover</string>
     <string name="book">Book</string>
     <string name="volume_key_page">Volume keys to turn page</string>
+    <string name="mouse_wheel_page">Mouse wheel to turn page</string>
     <string name="click_turn_page">Tap screen to turn page</string>
     <string name="page_anim">Flip animation</string>
     <string name="book_page_anim">Flip animation (book)</string>

+ 1 - 0
app/src/main/res/values-pt-rBR/strings.xml

@@ -196,6 +196,7 @@
     <string name="img_cover">Capa</string>
     <string name="book">Livro</string>
     <string name="volume_key_page">Botões de volume para virar páginas</string>
+    <string name="mouse_wheel_page">Rolagem do mouse para virar páginas</string>
     <string name="click_turn_page">Toque a tela para virar página</string>
     <string name="page_anim">Virar animação</string>
     <string name="book_page_anim">Virar animação (livro)</string>

+ 1 - 0
app/src/main/res/values-zh-rHK/strings.xml

@@ -193,6 +193,7 @@
     <string name="img_cover">封面</string>
     <string name="book">書</string>
     <string name="volume_key_page">音量鍵翻頁</string>
+    <string name="mouse_wheel_page">鼠标滚动翻页</string>
     <string name="click_turn_page">點擊翻頁</string>
     <string name="page_anim">翻頁動畫</string>
     <string name="book_page_anim">翻頁動畫(本書)</string>

+ 1 - 0
app/src/main/res/values-zh-rTW/strings.xml

@@ -195,6 +195,7 @@
     <string name="img_cover">封面</string>
     <string name="book">書</string>
     <string name="volume_key_page">音量鍵翻頁</string>
+    <string name="mouse_wheel_page">鼠标滚动翻页</string>
     <string name="click_turn_page">點擊翻頁</string>
     <string name="page_anim">翻頁動畫</string>
     <string name="book_page_anim">翻頁動畫(本書)</string>

+ 1 - 0
app/src/main/res/values-zh/strings.xml

@@ -195,6 +195,7 @@
     <string name="img_cover">封面</string>
     <string name="book">书</string>
     <string name="volume_key_page">音量键翻页</string>
+    <string name="mouse_wheel_page">鼠标滚轮翻页</string>
     <string name="click_turn_page">点击翻页</string>
     <string name="page_anim">翻页动画</string>
     <string name="book_page_anim">翻页动画(本书)</string>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -196,6 +196,7 @@
     <string name="img_cover">Cover</string>
     <string name="book">Book</string>
     <string name="volume_key_page">Volume keys to turn page</string>
+    <string name="mouse_wheel_page">Mouse wheel to turn page</string>
     <string name="click_turn_page">Tap screen to turn page</string>
     <string name="page_anim">Flip animation</string>
     <string name="book_page_anim">Flip animation (book)</string>

+ 7 - 0
app/src/main/res/xml/pref_config_read.xml

@@ -69,6 +69,13 @@
         app:iconSpaceReserved="false"
         app:isBottomBackground="true" />
 
+    <io.legado.app.lib.prefs.SwitchPreference
+        android:defaultValue="true"
+        android:title="@string/mouse_wheel_page"
+        android:key="mouseWheelPage"
+        app:iconSpaceReserved="false"
+        app:isBottomBackground="true" />
+
     <io.legado.app.lib.prefs.SwitchPreference
         android:defaultValue="true"
         android:title="@string/volume_key_page"