0

我有一个持续时间为 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;
                        }
                    });

4

1 回答 1

0
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;
  }
});

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

于 2018-03-16T18:45:46.433 回答