2014-03-03 197 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播放按钮。 –