VideoGörüntü oynatma durumu veya MediaController için olay çalma/duraklat


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.

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

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. 08 kas. 112011-11-08 18:40:00

+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. 09 kas. 112011-11-09 08:49:46

+1

Tamam, düşündüğüm ve çok faydalı olduğunu düşündüğüm, teşekkürler 09 kas. 112011-11-09 17:23:32

  0

@MH. Açıklama için teşekkürler 29 eki. 132013-10-29 15:50:54

  0

@MH. Tamponlama durumunu alabilir miyiz, video görüntüsü iyi çalışıyor demektir, ancak zayıf/yavaş internet bağlantısı nedeniyle tamponlama ve tekrar çalma gibi ortada durur. Peki, bu durumu nasıl analiz edebiliriz ki bekle/tampon ilerleme çubuğu ayarlayabilirim. 31 mar. 152015-03-31 14:33:57

  0

@Sadiq: Ne yazık ki 'VideoView', tamponlama güncellemelerini almak için herhangi bir geri arama sunmuyor. Ancak, 'OnPreparedListener' geri çağrısında yatan 'MediaPlayer' örneğine başvuru almayı ve buna bir 'OnBufferingUpdateListener' ayarlamayı deneyebilirsiniz. Bu, 'VideoView' dinleyicisini geçersiz kılacağına dikkat edin, ancak ikincisi yalnızca arabelleğe alma yüzdesini takip etmek için kullandığı için büyük bir anlaşma olmamalıdır (ancak,' getBufferPercentage'da döndürme dışında herhangi bir yerde kullanılmaz.() '). 31 mar. 152015-03-31 18:21:05


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ış 07 kas. 112011-11-07 17:39:27