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回連続して再生され、再生したい音のエコーが遅れていました。ログと「inonTouchEvent!」を確認しました。メッセージは3回ログに記録されました。

このアクティビティはタイトル画面の静止画像であり、タップして次のアクティビティを開始するというアイデアです。そうすると、指定したサウンドが再生されます。

私の特定の問題については、グローバルレベルのint変数を配置することで解決できました。

private static int playerInstances = 0;

次に、MediaPlayerの行を次のようにラップします。

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

これにより、そのコードは1回だけ実行されることが保証されました。だから私の問題は解決しました。なぜワンタップでonTouchEventを3回取得したのか疑問に思っています。

4

2 に答える 2

11

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);
}
于 2012-08-09T14:48:49.880 に答える
3

これは、onTouchevent()に、画面に触れると呼び出される3つのイベント、つまりACTION_DOWN、ACTION_MOVE、ACTION_UPがあるために発生します。したがって、これらのイベントの条件を個別に適用しない場合、onTouchEvent()のコードに対して3回の呼び出しが行われます。したがって、適切なアクションイベントでコードを記述してください。

于 2017-05-09T11:15:04.580 に答える