在 android 工作室中按下时继续播放声音

Continue playing a sound when pressed down in android studio

我有一个持续时间为 4 的声音。我想通过按下而不停止它来连续播放这种声音,就像按下钢琴键一样,它会在不循环或停止的情况下播放声音。

c.setOnTouchListener(new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                            switch (event.getAction()) {
                                case MotionEvent.ACTION_DOWN: // Button Pressed
                          soundPool.stop(SID1_c);                                        
                         SID1_c = soundPool.play(sound_c, 1, 1, 1, 0, 0);
                                c.setBackgroundResource(R.drawable.key4);
                                   return true;
                                case MotionEvent.ACTION_UP:// Button released

                                    handler =new Handler();
                                    handler.postDelayed(new Runnable() {
                                        @Override
                                        public void run() {
                                            soundPool.stop(SID1_c);
                                        }
                                    },90);

                                    return false;

                            }
                            return false;
                        }
                    });

button.setOnTouchListener(new View.OnTouchListener(){
  onTouch(View v, MotionEvent event){
     switch(getActionMasked()){
       case ACTION_BUTTON_PRESS:
        handler.removeCallbacksAndMessages(null);
        soundPool.stop(SID1_c);                                        
        SID1_c = soundPool.play(sound_c, 1, 1, 1, 0, 0);
        c.setBackgroundResource(R.drawable.key4);
        return true;

       case ACTION_BUTTON_RELEASE:
       handler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        soundPool.stop(SID1_c);
                                    }
                                },90);
       return false;
     }
     return false;
  }
});

你的代码问题: 如果你点击按钮两次 当你开始 post 延迟停止第一个按钮的声音时,这个停止将击中第二次按下而不是之前停止的第一个 要更正此问题,您应该在播放声音时退出处理程序 你可以在新印刷完成后使用 handler.removeCallbacksAndMessages(null);