質問

私の問題は単純なものです。ボタンが押されたときにのみ、ループサウンドを再生したいです。以下はスイッチステートメントであり、他のアプローチが私が試した場合です。せいぜい、私はサウンドを再生できますが、ボタンが押されなくなっても一時停止しません。

    public boolean onTouch(View v, MotionEvent event) {
 MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.clash);

 if (v.getId() == R.id.clash && event.getAction() == MotionEvent.ACTION_DOWN){
  mp.setLooping(true);
  mp.start();

 }else if (v.getId() == R.id.clash && event.getAction() == MotionEvent.ACTION_UP)
 {mp.pause();

 }
}

    public boolean onTouch(View v, MotionEvent event) {
    MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.clash);

     switch (event.getAction()){

     case MotionEvent.ACTION_DOWN:
      mp.setLooping(true);
      mp.start();

     case MotionEvent.ACTION_UP:
      mp.pause();
    }


    return false;
   }
役に立ちましたか?

解決

戻ってみてください true それ以外の false の終わりに onTouch.

今起こっているのは今起こっていることです ACTION_DOWN あなたの音を始めるイベント。戻ることによって false あなたはあなたをフレームワークに伝えます しませんでした アクションを消費します。これは、将来の行動も消費しないことを意味します。したがって、ビューにタッチイベントの送信を停止します。

関連する引用から Android-Developers:

Action_Downイベントを取得すると、Trueを返していますか?そうでない場合、これはおそらく問題です。フレームワークは、将来のタッチイベント(Action_MovesとAction_up)をそのビューに配信します。タッチリスナーまたはOntoucheventがtrueを返します。

他のヒント

MPをOntouch Handlerの外に移動してください!

MediaPlayer mp;
public boolean onTouch(View v, MotionEvent event) {
mp = MediaPlayer.create(getBaseContext(), R.raw.clash);

 switch (event.getAction()){

 case MotionEvent.ACTION_DOWN:
  mp.setLooping(true);
  mp.start();

 case MotionEvent.ACTION_UP:
  mp.pause();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top