2017-07-21 45 views
-1

这是我为我的onTouchListener使得代码:我需要让我的应用程序支持双指缩放,但不能双击

if(event.getAction() == MotionEvent.ACTION_UP) { 
       Log.i("", "double touch : " + timeLastTouch + "... time passed: " + (System.currentTimeMillis() - timeLastTouch)); 
       if (System.currentTimeMillis() - timeLastTouch < 500) { 
        Log.i("", "double touch TRUE"); 
        timeLastTouch = System.currentTimeMillis(); 
        return true; 
       } else { 
        Log.i("", "double touch FALSE"); 
        timeLastTouch = System.currentTimeMillis(); 
        return false; 
       } 
      }else if(event.getAction() == MotionEvent.ACTION_DOWN) { 
       Log.i("", "double touch DOWN : " + timeLastTouch + "... time passed: " + (System.currentTimeMillis() - timeLastTouch)); 
       if (System.currentTimeMillis() - timeLastTouch < 500) { 
        Log.i("", "double touch TRUE DOWN"); 
        timeLastTouch = System.currentTimeMillis(); 
        return true; 
       }else { 
        Log.i("", "double touch FALSE DOWN"); 
        return false; 
       } 
      }else { 
       timeLastTouch = System.currentTimeMillis(); 
       Log.i("","double touch ELSE FALSE"); 
       return false; 
      } 

但它不工作。 此视图位于Surface视图上方。现在我只需要将事件发送到SurfaceView进行捏合(捏到放大) 现在我试着制作逻辑,这样如果它有双重触摸,那么我将返回true(它消耗了触摸,所以然后表面查看,没有得到触摸)。 但是,如果我这样做,捏缩放无法使用。 如果我删除这个逻辑,捏缩放,工作,所以我添加了一些日志,并跟着他们。我注意到,对于缩放缩放,你会得到2个向下的事件,并且只有在调用ACTION_MOVE之后。据推测,因为当你捏缩放,你放下2个手指,然后缩放。我的问题是,我的代码设置它,为第二个Action_down消耗触摸,这意味着捏开始缩放不开始。任何ideeas如何解决这个问题?

+0

你可能想看看[现有的捏实施](https://android-arsenal.com/search?q=pinch),看看他们是如何做到的。 – CommonsWare

+0

那么,我不需要执行捏合逻辑。已经存在。在低于我的观点的观点上。我想要的就是让我的观点消耗双击的触感,但不是捏。 (记录event.action)返回:0 0 1(action_down,action_down,action_up)用于双击,并返回0 0 2/1(action_down,action_down,move或up)用于捏。因此我的问题。原因如果我阻止第二个Action_down事件,我将无法获得缩放。如果我不阻止它,它将被发送到下一个视图,并且不会发生 –

+0

因此,我需要一个逻辑来知道在“移动”的MotionEvent被调用之前何时发生捏缩放。我尝试使用event.getIndexCounter()或检查它是否是多点触摸,但它只为我返回1 –

回答

0

我也能做到这一点,有以下逻辑:

viewTop.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.i("","double touch event action: ==========================="); 
      Log.i("","double touch event action:" + event.getAction()); 
      if(event.getAction() == MotionEvent.ACTION_DOWN) { 
       Log.i("", "double touch DOWN : " + timeLastTouch + "... time passed: " + (System.currentTimeMillis() - timeLastTouch) + "..... location diff: " + (event.getX() - xLastTouch)); 
       if (System.currentTimeMillis() - timeLastTouch < 1000 && Math.abs(event.getX() - xLastTouch) < 150 && Math.abs(event.getY() - yLastTouch) < 150) { 
        Log.i("", "double touch TRUE DOWN"); 
        timeLastTouch = System.currentTimeMillis(); 
        xLastTouch = event.getX(); 
        yLastTouch = event.getY(); 
        return true; 
       } else { 
        timeLastTouch = System.currentTimeMillis(); 
        xLastTouch = event.getX(); 
        yLastTouch = event.getY(); 
        Log.i("", "double touch FALSE DOWN"); 
        return false; 
       } 
      }else if(event.getAction() == MotionEvent.ACTION_UP) { 
       timeLastTouch = System.currentTimeMillis(); 
       xLastTouch = -1f; 
       yLastTouch = -1f; 
       return false; 
      }else { 
       timeLastTouch = System.currentTimeMillis(); 
       xLastTouch = event.getX(); 
       yLastTouch = event.getY(); 
       Log.i("","double touch ELSE FALSE"); 
       return false; 
      } 
     } 
    }); 

但是,如果我双击,第二接头是在另一个地方,它会发生。对此不太高兴,所以我需要更多地了解这一点,所以我不会接受这个答案。我在某种程度上需要知道,如果我在第二个Action_Down中使用或不使用这个,那么在这个pinch调用action_move之前。