android开发,开发一个视频播放器app,要求使用VideoView和MediaPlayer,需要自定义开始和暂停按钮,要使用seekbar来显示和控制播放进度,用MediaPlayer来获取当前播放位置,并用Timer来实时更新进度条
时间: 2024-03-08 14:49:10 浏览: 153
Android使用VideoView播放本地视频和网络视频的方法
好的,这是一个比较基础的视频播放器app的开发需求,我可以给你提供一些思路和代码实现的示例。
首先,在布局文件中使用VideoView来显示视频,同时添加一个SeekBar和两个Button用于控制视频播放。布局文件的代码如下:
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:paddingLeft="16dp"
android:paddingRight="16dp" />
<Button
android:id="@+id/btn_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_marginStart="16dp"
android:text="Play" />
<Button
android:id="@+id/btn_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp"
android:text="Pause" />
</RelativeLayout>
```
然后在Activity中初始化VideoView、SeekBar和Button,并设置MediaPlayer的相关监听器,代码如下:
```java
public class VideoPlayerActivity extends AppCompatActivity implements View.OnClickListener {
private VideoView mVideoView;
private SeekBar mSeekBar;
private Button mBtnPlay;
private Button mBtnPause;
private Timer mTimer;
private boolean mIsPlaying = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_player);
mVideoView = findViewById(R.id.video_view);
mSeekBar = findViewById(R.id.seek_bar);
mBtnPlay = findViewById(R.id.btn_play);
mBtnPause = findViewById(R.id.btn_pause);
mBtnPlay.setOnClickListener(this);
mBtnPause.setOnClickListener(this);
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mVideoView.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
mVideoView.pause();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mVideoView.start();
mIsPlaying = true;
startTimer();
}
});
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mSeekBar.setMax(mVideoView.getDuration());
startTimer();
}
});
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
stopTimer();
mIsPlaying = false;
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
stopTimer();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_play:
if (!mIsPlaying) {
mVideoView.start();
mIsPlaying = true;
startTimer();
}
break;
case R.id.btn_pause:
if (mIsPlaying) {
mVideoView.pause();
mIsPlaying = false;
stopTimer();
}
break;
default:
break;
}
}
private void startTimer() {
if (mTimer == null) {
mTimer = new Timer();
}
mTimer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
mSeekBar.setProgress(mVideoView.getCurrentPosition());
}
});
}
}, 0, 1000);
}
private void stopTimer() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
}
}
```
在代码中,我们使用了MediaPlayer的setOnPreparedListener、setOnCompletionListener方法来设置MediaPlayer的准备和完成监听器,使用VideoView的seekTo方法来控制视频播放位置,使用Timer来实时更新SeekBar的进度。同时,我们还实现了两个Button的点击事件,用来控制视频的播放和暂停。
当然,这只是一个最基础的视频播放器的实现,还有很多的功能可以添加和优化,例如全屏播放、倍速播放、视频列表等等,你可以根据需求进行扩展和优化。
阅读全文