2016-07-30 72 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