アプリ用のカスタムメディアコントローラーを作成するつもりです。シークバーを使用して、シークと進行状況の表示の両方を行うことを計画していました。これを実装しようとしています。
誰かがそのような実装を持っていますか、それとも私は間違った道を進んでいますか?
アプリ用のカスタムメディアコントローラーを作成するつもりです。シークバーを使用して、シークと進行状況の表示の両方を行うことを計画していました。これを実装しようとしています。
誰かがそのような実装を持っていますか、それとも私は間違った道を進んでいますか?
やっとわかった!!
私が思いついた解決策は次のようなものでした:
まず、ビデオの長さとしてシークバーの最大進行状況を設定します
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);
}
}
});
2番目の進行状況を設定します。
いいえ、あなたは正しい方向に進んでいます。ダウンロードの進行状況やストリーム(メディア)の現在の場所などを表示するのに非常に適しています。