android – onTouchEvent()的Activity会触发3次?

在我的TitleScreen活动中,我有……

@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三次.

解决方法:

你在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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...