2014-03-03 195 views
0

我試圖實現OnLongClickListener上的MediaPlayer,但我想不出我如何能在釋放按鈕設法停止音樂。OnLongClickListener - 播放()音樂 - 止回()

這就是我現在的代碼。

@Override 
public boolean onLongClick(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      if (v.getId() == R.id.play) { 
       mp1.setLooping(true); 
       mp1.start();    } 
                 } 
    else if (event.getAction() == MotionEvent.ACTION_UP) { 
      if (v.getId() == R.id.play) { 
       if (mp1 != null) { 
        mp1.setLooping(false); 
        mp1.pause(); 
        mp1 = null; 
       } 

} } 

     return false; } 

,但它給了我錯誤方法onLongClick類型MainActivity的(視圖,MotionEvent)必須覆蓋或實現超方法 我所管理的音樂上長按,但是,發佈虛假或真實的它沒玩「T停止音樂......我怎麼去管理它......

+1

的錯誤意味着您正試圖重寫不退出(或不能覆蓋)在超類中的方法。 'Activity'沒有'onLongClick'。 – Blackbelt

+0

我不認爲你可以在MediaPlayer上實現onLongClicklistener。你可以在某些視圖上實現它。實現它爲一些視圖像按鈕等 –

+0

onTouch呢? –

回答

0

我做到了與onTouch方法工作,它的工作原理有一段時間,但在第二次點擊我得到的NullPointerException

public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     if (v.getId() == R.id.play) { 
      mp1.setLooping(true); 
      mp1.start(); 
     } 
    } else if (event.getAction() == MotionEvent.ACTION_UP) { 
     if (v.getId() == R.id.play) { 
      if (mp1 != null) { 
       mp1.setLooping(false); 
       mp1.pause(); 
       mp1 = null; 
      } 
     } 
    } 
    return false; 
} } 

這裏是錯誤

致命異常:在 app.technozed.dogwhistle.MainActivity.o主顯示java.lang.NullPointerException natouch(MainActivity.java:68)at android.view.View.dispatchTouchEvent(View.java:3762)at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)at android.view.ViewGroup.dispatchTouchEvent( ViewGroup.java:863)維持在 com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow.java:1731) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)在 COM .android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1120) at android.app.Activity.dispatchTouchEvent(Activity.java:2086)at com.android.internal.policy.impl.PhoneWindow $ DecorView .dispatchTouchEvent(PhoneWindow.java:1715) at android.view.ViewRoot.handleMessag e(ViewRoot.java:1787)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:123)at android.app.ActivityThread.main( ActivityThread.java:4633)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:521)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)在 dalvik.system.NativeStart.main(本機方法)

我認爲這是因爲在暫停我設置mp1 = null;不是嗎?

是這個原因,我只是刪除MP1 = NULL;它工作正常。

+1

是的,這是因爲mp1爲空。在ACTION_UP上將其設置爲空值後,您不會初始化它。 – Adnan

+0

您是否嘗試暫停/恢復或停止/播放? – Adnan

0

您的代碼將開始,因爲這兩個動作(操作下和操作上)的觸摸然後釋放分別燒製後imidiatly停止播放。

試試這個:

@Override 
public boolean onLongClick(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      if (v.getId() == R.id.play) { 
       if(mp1!=null && mp1.isPlaying()) 
       mp1.setLooping(false); 
        mp1.pause(); 
        mp1 = null; 

       }else{ 
       // initialize mp1 ... Initialize your player here 
       // 
       mp1.setLooping(true); 
       mp1.start(); 

      } 
     } 
     return false; 
} 
+0

它甚至不玩。 –

+0

你沒有粘貼你的代碼初始化你的播放器,所以我在那個地方添加了一個評論。在這裏初始化你的播放器://初始化mp1 ... – Adnan

+0

我在onCreate中初始化了播放器,之後我有5個按鈕,不同的歌曲,畢竟這與我onLongClickListener 1播放按鈕。 –