Android 点击VideoView 进度条显示
时间: 2023-08-16 19:07:36 浏览: 469
要在Android VideoView中添加进度条,可以使用android.widget.MediaController类。MediaController是一个控制视频播放的UI组件,其中包括播放/暂停按钮、快进/快退按钮、进度条等,可以在VideoView中显示。
以下是添加进度条的步骤:
1. 创建VideoView并设置其属性
```
VideoView videoView = (VideoView) findViewById(R.id.videoView);
videoView.setVideoPath("http://example.com/video.mp4");
```
2. 创建MediaController对象
```
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
```
3. 将MediaController对象设置为VideoView的控制器
```
videoView.setMediaController(mediaController);
```
4. 调用MediaController的show()方法显示控制器
```
mediaController.show();
```
这样做可以在VideoView中添加一个进度条控件,用户可以通过拖动进度条来快进或快退视频。此外,MediaController还提供了其他控件,如播放/暂停按钮、音量控制等,可以根据需要自定义。
相关问题
android surfaceview视频进度条
在Android中,SurfaceView通常用于显示自定义视图,如视频播放。如果你想在SurfaceView上添加一个视频进度条来跟踪视频播放进度,你可以按照以下步骤操作:
1. **创建SurfaceView**:首先,在布局文件中或XML布局中声明一个SurfaceView,并设置其宽度、高度以及合适的容器。
```xml
<SurfaceView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
2. **VideoPlayer实现**:在Activity中,你可以使用ExoPlayer或者其他视频播放库来管理视频播放。当播放开始时,记录初始时间和总时长,然后创建一个ProgressListener监听播放进度。
```java
SurfaceView videoView = findViewById(R.id.video_view);
ExoPlayer player = ExoPlayerFactory.newSimpleInstance(...);
player.setProgressUpdateListener(new ProgressUpdateListener() {
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
long durationMs = timeline.getDuration();
int progress = (int) ((player.getCurrentPosition() * 100) / durationMs);
updateSeekBar(progress);
}
});
```
3. **进度条更新**:`updateSeekBar`方法是一个辅助函数,它会更新与SurfaceView关联的Seekbar组件,展示当前播放的进度。
```java
private void updateSeekBar(int progress) {
SeekBar seekBar = findViewById(R.id.seek_bar);
seekBar.setProgress(progress);
}
```
4. **播放控制**:在播放过程中,当用户拖动Seekbar或暂停/继续播放视频时,可以同步更新SurfaceView的播放状态。
5. **注意同步**:确保在UI线程中更新SeekBar,避免ANR错误。
Android 视频 自定义进度条 暂停播放键
如果您想要实现自定义的视频播放进度条和暂停/播放按钮,可以按照以下步骤进行:
1. 在布局文件中添加 VideoView、SeekBar 和暂停/播放按钮:
```
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/play_pause_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pause" />
```
2. 在 Activity 中获取 VideoView、SeekBar 和暂停/播放按钮的引用:
```
VideoView videoView = findViewById(R.id.video_view);
SeekBar seekBar = findViewById(R.id.seek_bar);
Button playPauseButton = findViewById(R.id.play_pause_button);
```
3. 设置 VideoView 的路径并开始播放:
```
videoView.setVideoPath("path/to/video.mp4");
videoView.start();
```
4. 为 VideoView 添加一个 OnPreparedListener,当视频准备好时,设置 SeekBar 的最大值和添加一个定时器来更新 SeekBar 的进度:
```
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
seekBar.setMax(videoView.getDuration());
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
seekBar.setProgress(videoView.getCurrentPosition());
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(runnable, 1000);
}
});
```
5. 为 SeekBar 添加一个 OnSeekBarChangeListener,当拖动 SeekBar 时,改变视频播放的位置:
```
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
videoView.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
```
6. 为暂停/播放按钮添加一个 OnClickListener,当点击按钮时,暂停或继续播放视频:
```
playPauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (videoView.isPlaying()) {
videoView.pause();
playPauseButton.setText("Play");
} else {
videoView.start();
playPauseButton.setText("Pause");
}
}
});
```
7. 为 VideoView 添加一个 OnCompletionListener,当视频播放完成时,将暂停/播放按钮的文本设置为“Play”:
```
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
playPauseButton.setText("Play");
}
});
```
以上就是实现自定义视频播放进度条和暂停/播放按钮的方法。您可以根据您的需求自定义 SeekBar 的样式和暂停/播放按钮的图标。
阅读全文