2013-12-09 44 views
1

我想設置一個按鈕狀態按= true onTouch,然後讓它在特定時間段後回到pressed = false。setPressed一定的時間段

的onTouch方法正確設置狀態,按下

myTouchListener= new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 

      lastPressed = (Button)v; 
      lastPressed.setPressed(true); 

      return true; 
     } 
    }; 

然後我想我可以用一個定時器設置回原來的狀態。但是一個定時器需要一個TimerTask,它需要一個可運行的,所以我不能傳遞它給「lastPressed」按鈕的引用。

我完全不知所措,因爲要從這裏出發。

回答

0

使用消息處理程序,並在重置按鈕狀態時,將計時器任務的消息發送回您的活動。

注意:許多應用程序都知道TimerTask的實際時序太不準確。

沒有使用TimerTask,更好的方法是在您的活動中設置消息處理程序。然後,將按鈕狀態設置爲按下後,您的活動可以向其自身發佈延遲的消息,以便在將來希望的時間重新設置按鈕狀態。

0

嘗試使用onTouchEvent控制按鈕的狀態。

這是示例代碼:

button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    // show interest in events resulting from ACTION_DOWN 
    if(event.getAction()==MotionEvent.ACTION_DOWN) return true; 
    // don't handle event unless its ACTION_UP so "doSomething()" only runs once. 
    if(event.getAction()!=MotionEvent.ACTION_UP) return false; 
    doSomething(); 
    button.setPressed(true);     
    return true; 
    } 
    }); 
1

它實際上很容易,
創建最終變量指向同一個按鈕,然後就可以在一個線程中使用它,
等開始一個新的線程,它在一段時間後將其設爲假:

myTouchListener= new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 

     lastPressed = (Button)v; 
     lastPressed.setPressed(true); 

     final Button lp = lastPressed; 
     Thread t = new Thread() 
     { 
      public void run() 
      { 
       try 
       { 
        Thread.sleep(1000); //your time in milliseconds here 
       } catch (Exception e) { } 

       lp.setPressed(false); 
      } 
     } 
     t.start(); 
     return true; 
    } 
};