Преглед изворни кода

滚动阅读时,多指触摸造成闪烁的问题

jaredtech пре 3 година
родитељ
комит
51f0c194da

+ 2 - 7
app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt

@@ -182,13 +182,8 @@ class ReadView(context: Context, attrs: AttributeSet) :
         }
 
         //在多点触控时,事件不走ACTION_DOWN分支而产生的特殊事件处理
-        if (event.actionMasked == MotionEvent.ACTION_POINTER_DOWN){
-            //当多个手指同时按下的情况,将最后一个按下的手指的坐标设置为起始坐标,所以只有最后一个手指的滑动事件被处理
-            setStartPoint(event.getX(event.pointerCount - 1), event.getY(event.pointerCount - 1), false)
-        } else if(event.actionMasked == MotionEvent.ACTION_POINTER_UP){
-            //当多个手指同时按下的情况,当抬起一个手指时,起始坐标恢复为第一次按下的手指的坐标
-            setStartPoint(event.x, event.y, false)
-            return true
+        if (event.actionMasked == MotionEvent.ACTION_POINTER_DOWN || event.actionMasked == MotionEvent.ACTION_POINTER_UP){
+            pageDelegate?.onTouch(event)
         }
         when (event.action) {
             MotionEvent.ACTION_DOWN -> {

+ 9 - 0
app/src/main/java/io/legado/app/ui/book/read/page/delegate/ScrollPageDelegate.kt

@@ -33,6 +33,15 @@ class ScrollPageDelegate(readView: ReadView) : PageDelegate(readView) {
     }
 
     override fun onTouch(event: MotionEvent) {
+        //在多点触控时,事件不走ACTION_DOWN分支而产生的特殊事件处理
+        if (event.actionMasked == MotionEvent.ACTION_POINTER_DOWN){
+            //当多个手指同时按下的情况,将最后一个按下的手指的坐标设置为起始坐标,所以只有最后一个手指的滑动事件被处理
+            readView.setStartPoint(event.getX(event.pointerCount - 1), event.getY(event.pointerCount - 1), false)
+        } else if(event.actionMasked == MotionEvent.ACTION_POINTER_UP){
+            //当多个手指同时按下的情况,当抬起一个手指时,起始坐标恢复为第一次按下的手指的坐标
+            readView.setStartPoint(event.x, event.y, false)
+            return
+        }
         when (event.action) {
             MotionEvent.ACTION_DOWN -> {
                 abortAnim()