Je n'arrive pas à trouver un événement qui écoute l'état de lecture. Je suis principalement intéressé par l'état play/pause
. J'utilise MediaController
qui a un bouton Play/Pause
, Mais j'ai un bouton secondaire qui contrôle également Play/Pause
. En utilisant mon bouton personnalisé, je peux play/pause
, Mais si je play/pause
En utilisant le bouton MediaController
play/pause
, Je n'ai actuellement aucun moyen de changer l'image sur mon bouton personnalisé play/pause
pour jouer ou mettre en pause.
Y a-t-il un événement que je ne connais pas pour que je puisse travailler pendant la lecture/pause?
C'est une question très similaire: Comment attraper un événement lorsque vous cliquez sur le bouton pause/lecture sur MediaController
Si vous utilisez le MediaController
en combinaison avec un VideoView
, il devrait être relativement facile d'étendre ce dernier et d'y ajouter votre propre écouteur.
Le VideoView personnalisé ressemblerait alors à quelque chose comme ceci dans sa forme la plus basique:
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();
}
}
Son utilisation est identique à l'utilisation d'un VideoView
normal, à la seule différence que nous pouvons maintenant y brancher notre propre écouteur.
// 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...
Enfin, vous pouvez également le déclarer dans votre mise en page XML et le gonfler (comme indiqué ci-dessus) - assurez-vous simplement que votre utilisation <package_name>.CustomVideoView
. Exemple:
<mh.so.CustomVideoView Android:layout_width="wrap_content"
Android:layout_height="wrap_content" Android:id="@+id/custom_videoview" />
Vous devriez être en mesure de définir votre propre MediaController.MediaPlayerControl et remplacer la pause et démarrer