2011-03-27 35 views
2

我有一些代碼讓我非常接近我試圖實現的目標。但有幾個問題。我想要做的是,當按下按鈕時,它將不斷調用AdvanceLog()方法。問題是,ACTION_DOWN運動事件不會繼續被調用。發生什麼是,當你按住時,第一個動作是ACTION_DOWN,其後的每個動作都是按住ACTION_MOVE。 這導致了一些問題,因爲我不是真的在尋找移動動作,更重要的是隻有重複下來的動作。有什麼建議麼?Android - OnTouch做工

advanceButton.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) 
      { 
       int counter=0; 
       if(event.getAction()==MotionEvent.ACTION_DOWN || event.getAction()==MotionEvent.ACTION_MOVE) 
       { 
        fwdTouchCounter++; 
        AdvanceLog(true, true); 
        try 
        { 
         if(fwdTouchCounter>5)       
          Thread.sleep(30); 
         else 
          Thread.sleep(800); 
        } 
        catch (InterruptedException e) 
        { 

         e.printStackTrace(); 
        } 
       } 
       else if(event.getAction()==MotionEvent.ACTION_UP) 
        fwdTouchCounter=0; 

       return false; 

      } 
     }); 

回答

4

ACTION_DOWN touch事件中,觸發調用本地方法的線程。在這個方法裏面不斷讀取一個類變量(boolean是最簡單的),如果這個變量,我們稱它爲m_advanceLog爲真,繼續處理(推進你的日誌我猜)。在您的ACTION_UP觸摸事件中,將m_advanceLog設置爲false,應該停止循環並允許線程退出。

請記住,如果沒有用戶界面更改,這只是一個好主意,否則由於線程交互需要額外的一些工作。

+0

好主意,應該夠簡單。謝謝! – Jesse 2011-03-28 00:56:59

+0

@Jesse:如果可以,請將此答案標記爲已接受,謝謝! – 2011-03-28 11:39:48

+0

@MattBishop嗨,我有一個問題非常類似於上面提到的。而不是檢測我的手指觸摸屏幕和靜止,它不斷觸發Action_Move!請看看我的代碼,我會很感激你的意見。 http://stackoverflow.com/questions/28074817/surfaceview-multi-touch-motionevent-action-move-gets-executed-wrongly-and-conti – user3833732 2015-02-08 13:53:41