2016-08-29 54 views
1

我有一個OnTouchListener,我正在等待上下行動。然而,當用戶觸摸表面以快速/短暫時,只有向下事件將會觸發,而不是向上事件。我用睡眠線暫時固定它,但我確定這不是理想的解決方案。有沒有人有更好的主意?當用戶速度過快時,觸摸監聽器不會啓動

Button myButton = (Button) findViewById(R.id.button); 

myButton.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
        long timeLastTouch = System.currentTimeMillis(); 
        if (motionEvent.getAction() == MotionEvent.ACTION_UP) { 
         long timeTouchNow = System.currentTimeMillis(); 
         if (timeTouchNow - timeLastTouch < 400){ 
          return true; 
         } 
         return false; 
        } 
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
         long timeNow = System.currentTimeMillis(); 
         if ((timeNow - timeLastTouch) < 400) { 
          // do stuff 
          return true; 
         } 
         return false; 
        } 
      } 
      return false; 
     } 
    } 
}); 

回答

1

t這錯誤的方式,不要用sleep()方法。

刪除此sleep()邏輯,並聲明一個變量,並檢查最後一次觸摸時間和當前觸摸時間差,如果差異大於400毫秒,則僅在代碼時執行。

如果有任何問題,你會得到評論,我會解決你的問題,最好的運氣。

+0

好主意,但我應該在哪裏檢查差異是否更大400毫秒然後才執行代碼? – Dominic

+0

隨着ontouch方法 –

+0

你可以看看我的新代碼,並告訴它有什麼問題嗎? – Dominic

0

通過在按鈕上創建引用來添加觸摸偵聽器。

Button btn = (Button) findViewById(R.id.button); 
btn.setOnTouchListener(new OnTouchListener(){ 

.... 

}; 

你正在做Button.setOnTouchListener(new OnTouchListener()

+0

我已經有這個參考。 – Dominic

+0

仍然有問題 –

+0

是的,我有一個問題。我想在沒有睡眠線程的情況下執行此操作。 – Dominic