Si está utilizando el MediaController
en combinación con un VideoView
, debe ser relativamente fácil de extender este último y agregar su propio oyente a él.
El VideoView encargo sería entonces algo como esto en su forma más básica:
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();
}
}
uso es idéntico a utilizar un habitual VideoView
, con la única diferencia de que ahora podemos conectar nuestro propio oyente lo.
// 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...
Por último, también puede declarar que en su diseño xml y inflarlo (como se muestra arriba) - sólo asegúrese de que su uso <package_name>.CustomVideoView
. Ejemplo:
<mh.so.CustomVideoView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/custom_videoview" />
Genius! Gracias señor, funcionó perfectamente. +50 a ti. No puedo esperar hasta saber java y saber otras cosas como el guión de acción. – Ronnie
Me alegro de haber sido de ayuda. :) Por cierto, una llamada a 'super' generalmente se realiza junto con la anulación de un método. Al anular, básicamente estás redefiniendo el método de la clase base/super/padre. Si llama a 'super' en un método anulado, conservará su funcionalidad, que es lo que quiere hacer si su objetivo es * agregar * funcionalidad. En ocasiones, es posible que desee * reemplazar * la funcionalidad, en cuyo caso puede obtener el resultado deseado al no llamar a 'super'. –
bien eso es lo que pensé y muy útil saber, gracias – Ronnie