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