2011-10-28 35 views
25

Kayıttan yürütme durumunu dinleyen bir olay bulamıyorum. Ben çoğunlukla play/pause eyaletinde ilgileniyorum. Play/Pause düğmesi olan MediaController kullanıyorum, ancak Play/Pause denetleyen ikincil bir düğme var. Özel düğmemi kullanarak play/pause yapabilirim, ancak MediaControllerplay/pause düğmesini kullanarak play/pause düğmesini kullanırsam, şu anda oynatma veya duraklatmak için özel play/pause düğmemdeki görüntüyü değiştirmenin hiçbir yolu yoktur.VideoGörüntü oynatma durumu veya MediaController için olay çalma/duraklat

Bilmediğim bir olay var mı, bu nedenle oynatma/duraklatma sırasında biraz iş yapabilirim?

Bu çok benzer bir soru: How to catch event when click pause/play button on MediaController

cevap

81

başlamak gerekir, olması gerektiği Sonunu genişletmek ve ona kendi dinleyicinizi eklemek nispeten kolaydır. biz şimdi kendi dinleyici kanca ki tek fark olmak üzere düzenli bir VideoView kullanımıyla aynı işlevi kullanma

public class CustomVideoView extends VideoView { 

    private PlayPauseListener mListener; 

    public CustomVideoView(Context context) { 
     super(context); 
    } 

    public CustomVideoView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomVideoView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void setPlayPauseListener(PlayPauseListener listener) { 
     mListener = listener; 
    } 

    @Override 
    public void pause() { 
     super.pause(); 
     if (mListener != null) { 
      mListener.onPause(); 
     } 
    } 

    @Override 
    public void start() { 
     super.start(); 
     if (mListener != null) { 
      mListener.onPlay(); 
     } 
    } 

    public static interface PlayPauseListener { 
     void onPlay(); 
     void onPause(); 
    } 

} 

:

özel VideoView sonra en temel şekliyle böyle bir şey olmazdı ona.

// Some other code above... 
CustomVideoView cVideoView = (CustomVideoView) findViewById(R.id.custom_videoview); 
cVideoView.setPlayPauseListener(new CustomVideoView.PlayPauseListener() { 

    @Override 
    public void onPlay() { 
     System.out.println("Play!"); 
    } 

    @Override 
    public void onPause() { 
     System.out.println("Pause!"); 
    } 
}); 

cVideoView.setMediaController(new MediaController(this)); 
cVideoView.setVideoURI(...); 
// or 
cVideoView.setVideoPath(...); 
// Some other code below... 

Son olarak, ayrıca xml düzeni beyan edebilir ve (yukarıda gösterildiği gibi) şişirmek - sadece kullanım <package_name>.CustomVideoView emin olun. Örnek:

<mh.so.CustomVideoView android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:id="@+id/custom_videoview" /> 
+0

Genius! Teşekkürler bayım, mükemmel çalıştı. +50 sana. Ben java'yı tanıyana kadar bekleyemem ve ben de eylem senaryosu gibi diğer şeyleri biliyorum. – Ronnie

+1

Yardım edilmekten memnun oldum. :) Bu arada, "süper" ye bir çağrı genellikle bir yöntemi geçersiz kılma ile bağlantılı olarak yapılır. Geçersiz kılarak temel/süper/üst sınıfın yöntemini temel olarak yeniden tanımladınız. Bu tür geçersiz kılınan bir yöntemde "süper" yi çağırırsanız, bu işlevin işlevselliğini koruyacaksınız, amacınız * işlevine * eklenmekse yapmak istediğiniz şeydir. Bazen * işlevini değiştirmek isteyebilirsiniz, ancak bu durumda istediğiniz işlevi "süper" yi arayarak alabilirsiniz. –

+1

Tamam, düşündüğüm ve çok faydalı olduğunu düşündüğüm, teşekkürler – Ronnie

1

Sen bir VideoView birlikte MediaController kullanıyorsanız MediaController.MediaPlayerControl kendi ayarlayabilir ve duraklama geçersiz kılmak ve

+1

ben '@ duraklama() start() yöntemlerine Override', bir dispatchEvent yöntemiyle gibi nasıl yapabilirim (dispatchEvent bir actionscript yöntemidir) eğer benim özel MediaController üzerinde dinleyebilirsiniz. Ayrıca, durgunluğun ve davranışların tüm düzenli davranışlarını hala istiyorum, bu durumda süper kullanıyorum mı? Asla gerçekten süper anlaşılmamış – Ronnie