Se si sta utilizzando il MediaController
in combinazione con un VideoView
, dovrebbe essere relativamente facile estendere quest'ultimo e aggiungere il proprio listener ad esso.
Il VideoView personalizzato sarebbe quindi simile a questo nella sua forma più elementare:
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();
}
}
utilizzo è identico ad usare un normale VideoView
, con l'unica differenza è che ora possiamo collegare il nostro ascoltatore ad esso.
// 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...
Infine, si può anche dichiarare che nel layout xml e gonfiare (come indicato sopra) - basta assicurarsi che il proprio utilizzo <package_name>.CustomVideoView
. Esempio:
<mh.so.CustomVideoView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/custom_videoview" />
fonte
2011-11-08 05:55:31
Genius! Grazie signore, ha funzionato perfettamente. +50 per te. Non vedo l'ora di conoscere java e conosco altre cose come lo script di azione. – Ronnie
Felice di essere stato di aiuto. :) A proposito, una chiamata a 'super' viene di solito eseguita in concomitanza con l'override di un metodo. Sovrascrivendo stai fondamentalmente ridefinendo il metodo della classe base/super/genitore. Se chiami 'super' in un metodo sovrascritto, manterrai la sua funzionalità, che è ciò che vuoi fare se il tuo obiettivo è di * aggiungere * la funzionalità. A volte potresti voler * sostituire * la funzionalità, nel qual caso potresti ottenere il risultato desiderato non chiamando 'super'. –
ok questo è quello che pensavo e molto utile sapere, grazie – Ronnie