2016-07-30 44 views
0

当我按下按钮的手指并将其移动到按钮的界限外时,onTouchListener继续触发。Android按钮onTouchListener触发外部界限

当我按下按钮上的一个手指和按钮外的另一个手指时,会发生同样的事情:我的onTouchListener会触发第二根手指。

我该如何避免这种情况?只有当我按下按钮的边界时,我才会触发我的onTouchListener

Two fingers

One finger

这是我onTouchListener实施

View.OnTouchListener onTouchListener = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     if (fingerDown) { 
      xHistoricalFirstFinger = (int) event.getX(); 
      yHistoricalFirstFinger = (int) event.getY(); 
      xFirstClick = xHistoricalFirstFinger; 
      yFirstClick = yHistoricalFirstFinger; 
      //counter++; 
      fingerDown = false; 
     } 
     x = (int) event.getX(); 
     y = (int) event.getY(); 

     Log.v("Touched", client.remoteAdress.toString()); 

     mouseMoveProvider.nextX = x - xHistoricalFirstFinger; 
     mouseMoveProvider.nextY = y - yHistoricalFirstFinger; 
     mouseMoveProvider.Ready = true; 
     xHistoricalFirstFinger = x; 
     yHistoricalFirstFinger = y; 

     if (event.getAction() == MotionEvent.ACTION_UP) { 
      if (x - xFirstClick == 0 & y - yFirstClick == 0) { 
       new Thread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          client.MakeMove(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
          NetworkListener.HandleNetworkIsUreachableException(context); 
         } 
        } 
       }).start(); 
      } 

      fingerDown = true; 

     } 
     return true; 
    } 
}; 
+0

分享您的触摸监听器实现。任何不使用点击监听器的原因? – Shaishav

+0

不,我只需要触摸监听器 – Kotelnikov

回答

0

使用onClickListener

onTouchListener将触发对每个触摸(手指向下,手指...)

+0

我只需要触摸监听器,只触发按钮的边界 – Kotelnikov

+0

我认为你可以检查触摸事件坐标是否在视图内。没有做到这一点,但只看文档,你可以做'v.getDrawingRect()。contains(event.getX(),event.getY())'这将检查触摸事件坐标是否在视图矩形内 - 返回布尔值。 – Gudin

+0

我一直在想它,但你的方法是一种解决方法,不是吗?更优雅的解决方案存在吗? – Kotelnikov