web-dev-qa-db-ja.com

VideoView再生状態またはMediaController再生/一時停止のイベント

再生状態をリッスンするイベントが見つからないようです。私は主に_play/pause_状態に興味があります。 _Play/Pause_ボタンのあるMediaControllerを使用していますが、_Play/Pause_も制御するセカンダリボタンがあります。カスタムボタンを使用して_play/pause_を実行できますが、MediaController _play/pause_ボタンを使用して_play/pause_を実行すると、現在、カスタム_play/pause_ボタンで再生または一時停止します。

私が知らないイベントがあるので、再生/一時停止中に作業をすることができますか?

これは非常によく似た質問です: MediaControllerの一時停止/再生ボタンをクリックしたときにイベントをキャッチする方法

29
Ronnie

MediaControllerVideoViewと組み合わせて使用​​している場合、後者を拡張して独自のリスナーを追加するのは比較的簡単です。

カスタムの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" />
92
MH.

独自の MediaController.MediaPlayerControl を設定し、一時停止と開始をオーバーライドできるはずです

2
FunkTheMonk