android - Activity 的 onTouchEvent() 触发 3 次?

标签 android android-activity android-mediaplayer touch-event

在我的 TitleScreen Activity 中,我有...

@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 次。

此 Activity 只是标题屏幕的静态图像,其想法是您点击它以开始下一个 Activity,当您这样做时,应播放指定的声音。

对于我的特殊问题,我能够通过放置一个全局级别的 int 变量来解决它:

private static int playerInstances = 0;

然后用以下代码包装我的 MediaPlayer 行:

if (playerInstances == 0)
{
    MediaPlayer myplayer = MediaPlayer.create(TitleScreen.this, R.raw.critical1);
    myplayer.start();
    playerInstances++;
}

这确保该代码只执行一次。所以我的问题解决了。我只是想知道为什么我一次点击 3 次 onTouchEvent。

最佳答案

您实际上可以对 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);
}

关于android - Activity 的 onTouchEvent() 触发 3 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11884969/

相关文章:

java - Android 应用在 Android 上播放 HTTP Live Stream 时显示 : "Can' t Play This Video.

android - 数据没有加载,也没有错误或警告显示

java - 跨所有 Activity 的 API 类

Android MediaPlayer 仅播放 m3u8 音频流

android - 如何为媒体播放器使用 Intent ?

android - ScrollView 使自定义布局不可见

android - 无法在 Android 中创建 Firebase 用户

Android:更改 Realm 迁移中的旧主键

android - 是 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 的任何替代

Android-测试设备的 Mediaplayer 流媒体问题