在我的字幕活动中,我有…

@Override
public boolean onTouchEvent(MotionEvent event)
{
   Log.d("MyActivity", "in onTouchEvent!");

   MediaPlayer myplayer = MediaPlayer.create(TitleScreen.this, R.raw.mysound);
   myplayer.start();
   startActivity(new Intent("com.example.GAME"));
   return super.onTouchEvent(event);
}

这导致在轻敲屏幕时声音连续播放3次,使我想播放的声音产生延迟回声。我检查了日志,我的“在ontouchevent!”消息被记录了3次。
这个活动只是一个标题屏幕的静态图像,想法是点击它开始下一个活动,当你这样做时,指定的声音应该播放。
对于我的特定问题,我可以通过放置全局级别的int变量来解决它:
private static int playerInstances = 0;

然后用以下内容包装我的mediaplayer行:
if (playerInstances == 0)
{
    MediaPlayer myplayer = MediaPlayer.create(TitleScreen.this, R.raw.critical1);
    myplayer.start();
    playerInstances++;
}

这保证了代码只执行一次。所以我的问题解决了。我只是想知道为什么我一次轻敲三下就被触碰了。

最佳答案

实际上,您可以对onTouchEvent(比使用静态变量更好)执行以下操作:

@Override
public boolean onTouchEvent(MotionEvent event) {
   final int action = event.getAction();

   if(action == MotionEvent.ACTION_DOWN) {
       Log.d("MyActivity", "in onTouchEvent!");
       MediaPlayer myPlayer = MediaPlayer.create(TitleScreen.this, R.raw.mysound);
       myPlayer.start();
       startActivity(new Intent("com.example.GAME"));
   }
   return super.onTouchEvent(event);
}

10-01 21:50