3

, 나는onTouchEvent() 활동이 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 번을 재생하는 원인이되었다 ... 있습니다. 로그를 확인하고 내 "inTouchEvent!" 메시지가 3 번 기록되었습니다.

이 활동은 제목 화면의 정적 이미지에 불과하며 다음 활동을 시작하려면 해당 활동을 살짝 누르십시오. 그렇게하면 지정된 소리가 재생됩니다. 내 MediaPlayer를 라인을

private static int playerInstances = 0; 

후 포장 : 내 특정 문제에 대한

, 나는 세계적인 수준의 INT 변수를 배치하여 해결할 수 있었다

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

이 그 보험에 가입하는 코드 한 번만 실행됩니다. 그래서 내 문제가 해결되었습니다. 왜 한 번의 탭으로 onTouchEvent를 세 번 얻었는지 궁금합니다.

+7

나는 3 개의 모든 터치 이벤트 (ACTION_DOWN, ACTION_UP, ACTION_MOVE)가 호출되기 때문에 생각합니다. 이 링크를 한번보세요 http://stackoverflow.com/questions/11777459/listview-mark-the-position-where-the-user-touches/11777780#11777780 – Braj

+1

하, 훌륭합니다! 당신은 그 대답을 내가 당신에게 줄 수 있도록 대답해야합니다. – CptSupermrkt

+0

흠 ... 행복하게 도와 줬어 ... 너는 그걸로 투표 할 수 있었어;) – Braj

답변

9

당신은 실제로 (정적 변수를 사용하는 것보다 더 나은) 당신의 onTouchEvent에 수행 할 수있는 경우 : onTouchevent는()는 화면 즉 ACTION_DOWN을 터치하면이라고 세 가지 이벤트가 있기 때문에이 문제가 발생

@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); 
} 
+0

안녕, 좋은 생각, 고마워! – CptSupermrkt

+0

여러분을 환영합니다! –

2

, ACTION_MOVE, ACTION_UP. 따라서 이러한 이벤트에 대한 조건을 별도로 적용하지 않으면 onTouchEvent()의 코드가 3 번 호출됩니다. 따라서 적절한 액션 이벤트에 코드를 작성해야합니다.

관련 문제