10

アプリ用のカスタムメディアコントローラーを作成するつもりです。シークバーを使用して、シークと進行状況の表示の両方を行うことを計画していました。これを実装しようとしています。

誰かがそのような実装を持っていますか、それとも私は間違った道を進んでいますか?

4

2 に答える 2

23

やっとわかった!!

私が思いついた解決策は次のようなものでした:

まず、ビデオの長さとしてシークバーの最大進行状況を設定します

videoView.setOnPreparedListener(new OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {

            seekBar.setMax(videoView.getDuration());
            seekBar.postDelayed(onEverySecond, 1000);
        }
    });

このランナブルはプログレスバーを更新し続けます:

private Runnable onEverySecond=new Runnable() {

    @Override
    public void run() {

        if(seekBar != null) {
            seekBar.setProgress(videoView.getCurrentPosition());
        }

        if(videoView.isPlaying()) {
            seekBar.postDelayed(onEverySecond, 1000);
        }

    }
};

次に、シークバーのsetOnSeekBarChangeListenerを使用して、ユーザーがメディアでシークするようにすることができます。fromUserブール値を使用することで、ユーザーの操作によるコールバックなのか、

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {

            if(fromUser) {
                // this is when actually seekbar has been seeked to a new position
                videoView.seekTo(progress);
            }
        }
    });
于 2011-10-13T21:45:57.030 に答える
0

2番目の進行状況を設定します。

いいえ、あなたは正しい方向に進んでいます。ダウンロードの進行状況やストリーム(メディア)の現在の場所などを表示するのに非常に適しています。

于 2011-10-11T19:37:21.830 に答える