【问题标题】:Loop a sound while a button is pressed按下按钮时循环播放声音
【发布时间】:2012-10-21 11:22:50
【问题描述】:

我正在尝试在按下按钮时循环播放声音。

当我按下按钮让事件“MotionEvent.ACTION_DOWN”不会停止运行声音时,我怎么能这样做?我这样做的方式只运行一次。我已经尝试将return语句更改为false,但它不起作用。

setLoop MediaPlayer 选项对我没有帮助,因为我想继续播放新的声音,尽管当前声音没有完成播放。

这是我的代码:

public boolean onClick(View v, MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN){
        //here should not stop running the soundPool
        soundPool.play(R.raw.sound1, 1, 1, 1, 0, 1);
    }
    if(event.getAction() == MotionEvent.ACTION_UP){
        // stop running the soundpool
    }
    return true;
}

【问题讨论】:

    标签: java android ontouchlistener onclicklistener soundpool


    【解决方案1】:

    将第五个参数替换为 -1 :

    soundPool.play(R.raw.sound1, 1, 1, 1, -1, 1);
    

    play() doc 开始,第五 参数loop 采用 0(= 无循环)或 -1(= 永远循环)

    【讨论】:

    • 它产生相同的声音循环,我想将声音作为一个新的独立声音池多次运行,而不允许它停止其他声音的执行。为了给你一个想法,我想播放机枪多次播放子弹的声音。
    • 是的,它只是一个原始的子弹声音,但我不想循环它,我想在事件是 ACTION_DOWN 时重复执行此 soundPool。我想这样做是因为我想在前一个声音结束之前开始一个新的声音,而不是失去子弹射击声音的回声。问题是 ACTION_DOWN 只响应一次,我希望始终是一个活跃的监听器。谢谢!如果我没有正确解释,请原谅我。
    • 好的。我不确定,但您可以尝试实现 OnTouchListener 而不是 OnClickListener 并以与 onClick 相同的方式覆盖 onTouch 方法。
    【解决方案2】:

    return false; 替换为return true;。获取ACTION_UP 的唯一方法是返回true 以通知Android 系统您将处理整个onClick 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多