2012-05-31 49 views
0

我對Android開發仍然陌生並陷入困境。我有一個onTouchEvent,它爲旋轉圖形提供動力,並增加背景int [counter],觸發短暫的聲音效果(嘟嘟聲)進行播放。目前,如果[counter]> 10 a聲音播放(使用soundpool),並且只要onTouchEvent保持計數器大於10,就會立即循環播放。是否可以在嘟嘟聲效果播放之間插入延遲,以便延遲減少[counter]的值越大?需要幫助在音效回放之間插入延遲

實施例: 如果(計數器== 10){延遲= 80 //在MS} 如果(計數器== 90){延遲= 10 //在MS}

我的代碼:

sm = new SoundManager(); 
    sm.initSounds(getBaseContext()); 
    sm.addSound(1, R.raw.beep); 

... 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    if (buttonClicked) { 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      counter++; 
      startRotating(); 
      break; 
     case MotionEvent.ACTION_UP: 
      counter--; 
      stopRotating(); 
      break; 
     } 
    } 

    return super.onTouchEvent(event); 
} 

public void startRotating() { 
    returnRotating = false; 

    if (!keepRotating) { 
     keepRotating = true; 

     final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       if (keepRotating) { 
        degrees = (degrees + 10) % 360; 
        make(degrees); 
        counter = counter + 1; 

        if (counter > 10) 
         sm.playSound(1); // plays beep 

        handler.postDelayed(this, INTERVAL); 
       } 
      } 
     }, INTERVAL); 
    } 
} 

編輯:添加代碼

public void stopRotating() { 
    keepRotating = false; 

    if (!returnRotating) { 
     returnRotating = true; 

     final Handler handler = new Handler(); 

     handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 

       if (returnRotating) { 
        degrees = (degrees - 10) % 360; 
        make(degrees); 
        counter = counter - 1; 

        if (counter > 10) { 
        sm.playSound(1); // plays beep 

        handler.postDelayed(this, INTERVAL); 
       } 
      } 
     }, INTERVAL); 
    } 
} 

回答

0

怎麼這樣呢?

if (counter > 10) { 
     sm.playSound(1); // plays beep 
     INTERVAL = 100 - counter; 
     handler.postDelayed(this, INTERVAL); 
+0

這太簡單了,太棒了。我會嘗試一下並更新。 – n00bdev

+0

實際上,調整INTERVAL會導致旋轉的流體運動變得波濤洶涌,所以這似乎不是一個好的解決方案。 – n00bdev

+0

這很奇怪。所有你正在做的是改變延遲,然後再次啓動聲音處理程序。如果間隔爲500ms或200ms,則操作系統無額外開銷。如果你的環路很緊,這隻會成爲一個問題。你在其他地方使用INTERVAL嗎?嘗試把時間放在一些log.D調用? – Simon