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);
}
}
這太簡單了,太棒了。我會嘗試一下並更新。 – n00bdev
實際上,調整INTERVAL會導致旋轉的流體運動變得波濤洶涌,所以這似乎不是一個好的解決方案。 – n00bdev
這很奇怪。所有你正在做的是改變延遲,然後再次啓動聲音處理程序。如果間隔爲500ms或200ms,則操作系統無額外開銷。如果你的環路很緊,這隻會成爲一個問題。你在其他地方使用INTERVAL嗎?嘗試把時間放在一些log.D調用? – Simon