2014-03-07 32 views
0

我想製作一個程序,告訴我持續按住按鈕的秒數。在Android中單擊按鈕的計數時間(秒)

例如,如果我點擊按鈕5秒鐘,它應該告訴我按鈕保持按下5秒鐘。

這是可以在android中實現嗎?

這是我如何嘗試,沒有工作,因爲當我把while循環放入時,按鈕仍然保持點擊狀態,即使我按下它僅僅一秒鐘。該程序不會崩潰,但按鈕仍然點擊,我認爲它凍結。

thread = new HandlerThread(""); 



    btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      while(btn.isPressed()) 
      { 

       try { 
        thread.sleep(1000); 
        total = total++; 
        temp = temp++; 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      Toast.makeText(MainActivity.this, ""+temp+" "+total, 0).show(); 


     } 
    }); 

回答

5

你可以使用時間戳,以及OnTouchListener實現這一目標。

當您的OnTouchListener收到ACTION_DOWN事件時,請存儲第一個時間戳。當它收到一個ACTION_UP事件時,存儲第二個時間戳並計算兩者之間的差異。

正如Raghunandan所提到的,您不應該在UI線程中使用諸如thread.sleep之類的調用阻止UI,因爲這會導致UI停止響應,並且在某些情況下會導致程序因此而被終止。

這是我上面概述的一個例子。請注意,這段代碼是從內存中寫入的,並沒有經過測試,但您應該瞭解它的一般要點。

btn.setOnTouchListener(new OnTouchListener() { 
    private long firstTouchTS = 0; 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction()==MotionEvent.ACTION_DOWN) { 
      this.firstTouchTS = System.currentTimeMillis(); 
     } else if (event.getaction()==MotionEvent.ACTION_UP) { 
      Toast.makeText(MainActivity.this,((System.currentTimeMillis()-this.firstTouchTS)/1000)+" seconds",0).show(); 
     } 
    } 
}); 

參考文獻:OnTouchListenerMotionEvent