Cpt*_*rkt 3 android touch-event android-mediaplayer android-activity
在我的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);
}
Run Code Online (Sandbox Code Playgroud)
这导致声音在点击屏幕时快速连续播放3次,使我想播放的声音有一个延迟的回声.我检查了日志,以及我的"onTouchEvent!" 消息被记录了3次.
此活动只是标题屏幕的静态图像,您可以点击它来开始下一个活动,当您这样做时,指定的声音应该是播放器.
对于我的特定问题,我能够通过放置一个全局级别的int变量来解决它:
private static int playerInstances = 0;
Run Code Online (Sandbox Code Playgroud)
然后用我的MediaPlayer线包装:
if (playerInstances == 0)
{
MediaPlayer myplayer = MediaPlayer.create(TitleScreen.this, R.raw.critical1);
myplayer.start();
playerInstances++;
}
Run Code Online (Sandbox Code Playgroud)
这保证了该代码只执行一次.所以我的问题解决了.我只是想知道为什么我一次点击onTouchEvent三次.
Ale*_* C. 10
你实际上可以做什么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);
}
Run Code Online (Sandbox Code Playgroud)