Подтвердить что ты не робот

Событие для состояния воспроизведения VideoView или воспроизведения/паузы MediaController

Я не могу найти событие, которое прослушивает состояние воспроизведения. Меня больше всего интересует состояние play/pause. Я использую MediaController, у которого есть кнопка play/pause, но у меня есть дополнительная кнопка, которая также управляет play/pause. Используя мою пользовательскую кнопку, я могу play/pause, но если я play/pause с помощью кнопки MediaController play/pause, у меня нет способа изменить изображение на моей пользовательской кнопке play/pause для воспроизведения или паузы.

Есть ли событие, о котором я не знаю, так что я могу сделать некоторую работу во время воспроизведения/паузы?

Это очень похожий вопрос: Как поймать событие при нажатии кнопки паузы/воспроизведения на MediaController

4b9b3361

Ответ 1

Если вы используете MediaController в сочетании с VideoView, это должно быть относительно легко расширить последнее и добавить к нему своего собственного слушателя.

Пользовательский VideoView тогда будет выглядеть примерно так в своей основной форме:

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();
    }

}

Использование его идентично использованию регулярного VideoView, с той лишь разницей, что теперь мы можем подключить к нему свой собственный слушатель.

// 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...

Наконец, вы также можете объявить его в своем макете xml и раздуть его (как показано выше) - просто убедитесь, что вы используете <package_name>.CustomVideoView. Пример:

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

Ответ 2

Вы должны установить собственный MediaController.MediaPlayerControl и переопределить паузу и запустить