2014-12-22 18 views
0

我試圖創建一組按鈕,它們會通過單擊一次,將值向上或向下改變1,然後通過按住按鈕快速更改值。我無法弄清楚如何快速改變價值。這裏是我的:使用onLongClickListener快速更改值

btPlus.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     mTempo=mTempo+1; 
     setTempo(mTempo + 1); 
     tvTempo.setText(Integer.toString(mTempo)); 
     } 
    }); 
    btPlus.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public void onLongClick(View view) { 
      mTempo = mTempo + 1; 
      setTempo(mTempo + 1); 
      tvTempo.setText(Integer.toString(mTempo)); 
     } 
    });        
    btMinus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mTempo=mTempo-1; 
      setTempo(mTempo - 1); 
      tvTempo.setText(Integer.toString(mTempo)); 
     } 
    }); 
    btMinus.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public void onLongClick(View view) { 
      mTempo = mTempo - 1; 
      setTempo(mTempo - 1); 
      tvTempo.setText(Integer.toString(mTempo)); 
     } 
    });  
    return rootView; 
} 

感謝您的幫助。

回答

0

按住按鈕是不需要長時間點擊按鈕的。您需要一個onTouchListener

在onPressed方法檢查MotionEvent是否UP或DOWN,然後開始/停止計數。

編輯:嘗試在一個線程計數了,這樣的事情:

Final Thread t = new Thread(new Runnable(){ 
     @Override public void run(){ 
      while(!t.isInterrupted(){ 
      setTempo(mTempo++); 
      } 
     } 
switch (event){ 
case ACTION_DOWN: 
     t.start(); 
     break; 
case ACTION_UP: 
     t.interrupt(); 
     break 
} 
+0

我能理解使用onTouchListener,但我仍然有如何讓同時按下按鈕,它連續數掙扎。任何額外的想法? –

+0

您可以在DOWN上啓動一個新的線程並啓動它。在你上打斷它。線程在一段時間內不會中斷循環你的mTempo – Tobi

+0

心靈幫助一點點?它表示t從內部類訪問,需要在第一種情況下被宣佈爲final,然後在第二種情況下t可能未被初始化。 –