参看:Android自定义视频播放器(一):https://blog.csdn.net/zxd1435513775/article/details/81507909 参看:Android自定义视频播放器(二):https://blog.csdn.net/zxd1435513775/article/details/81533053 参看:Android自定义视频播放器(三):https://blog.csdn.net/zxd1435513775/article/details/81535065
一、引言有时候,当启动VideoActivity时,传递的参数,不是一个单独的URL(此地方播放的的网络视频),也可能是一个URL的List,对于这种情况,播放器就有了播放下一个和上一个视频的必要性。
下面对播放下一个视频和上一个视频进行事件绑定。
@Override
public void onClick(View v) {
if ( v == btnVoice ) {
//声音按钮,处理声音
isMute = !isMute;
updataVoice(currentVoice, isMute);
} else if ( v == btnSwichPlayer ) {
// Handle clicks for btnSwichPlayer
} else if ( v == btnExit ) {
// 退出视频
finish();
} else if ( v == btnVideoPre ) {
//播放上一个视频
playPreVideo()
} else if ( v == btnVideoStartPause ) {
//播放和暂停按钮
startAndPause();
} else if ( v == btnVideoNext ) {
//播放下一个视频
playNextVideo()
} else if ( v == btnVideoSiwchScreen ) {
// Handle clicks for btnVideoSiwchScreen
}
}
二、播放下一个视频按钮事件绑定
1、获取前一个Activity传递过来的数据
//前一个页面,携带数据传递
String[] videoList = {...};
int position = 0;
Intent intent = new Intent(context,VideoActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("videoList",videoList);
intent.putExtras(bundle);
intent.putExtra("position",position);
startActivity(intent);
//传入进来的视频列表
private ArrayList list;
private int position;
list= (ArrayList) getIntent().getSerializableExtra("videoList");
position = getIntent().getIntExtra("position", 0);
//此处可能得到一个uri播放地址
uri = getIntent().getData();
2、playNextVideo()方法
/**
* 播放下一个视频
*/
private void playNextVideo() {
if ( list != null && list.size() > 0) {
position++;//播放下一个
if (position < list.size()) {
//得到播放地址
String url= list.get(position);
videoView.setVideoPath(url);
//设置按钮状态
setButtonState();
}
} else if (uri != null) {
//此处需要注意的是:也有可能传过来一个单独的URL,比如别的APP使用隐式意图,来启动播放器
setButtonState();
}
}
3、设置按钮的状态
private void setButtonState() {
if ( list != null && list.size() > 0) {
if (list.size() == 1) { //当视频列表长度为1时,两个按钮置灰,不可点击
setEnable(false);
} else if (list.size() == 2) { //当视频列表长度为2时,根据位置设置两个按钮状态
if (position == 0) {
btnVideoPre.setBackgroundResource(R.drawable.btn_pre_gray);
btnVideoPre.setEnabled(false);
btnVideoNext.setBackgroundResource(R.drawable.btn_video_next_selector);
btnVideoNext.setEnabled(true);
} else if (position == list.size() - 1) {
btnVideoNext.setBackgroundResource(R.drawable.btn_next_gray);
btnVideoNext.setEnabled(false);
btnVideoPre.setBackgroundResource(R.drawable.btn_video_pre_selector);
btnVideoPre.setEnabled(true);
}
} else { //当视频列表长度大于2个时
if (position == 0) {
btnVideoPre.setBackgroundResource(R.drawable.btn_pre_gray);
btnVideoPre.setEnabled(false);
} else if (position == list.size() - 1) {
btnVideoNext.setBackgroundResource(R.drawable.btn_next_gray);
btnVideoNext.setEnabled(false);
} else {
setEnable(true);
}
}
} else if (uri != null) {
//两个按钮设置灰色
setEnable(false);
}
}
private void setEnable(boolean isEnable) {
if (isEnable) {
btnVideoPre.setBackgroundResource(R.drawable.btn_video_pre_selector);
btnVideoPre.setEnabled(true);
btnVideoNext.setBackgroundResource(R.drawable.btn_video_next_selector);
btnVideoNext.setEnabled(true);
} else {
//两个按钮设置灰色
btnVideoPre.setBackgroundResource(R.drawable.btn_pre_gray);
btnVideoPre.setEnabled(false);
btnVideoNext.setBackgroundResource(R.drawable.btn_next_gray);
btnVideoNext.setEnabled(false);
}
}
三、播放上一个视频按钮事件绑定
1、playPreVideo()方法
/**
* 播放上一个视频
*/
private void playPreVideo() {
if (list!= null && list.size() > 0) {
//播放上一个视频
position--;
if (position >= 0) {
//得到播放地址
String url= list.get(position);
videoView.setVideoPath(url);
//设置按钮状态
setButtonState();
}
} else if (uri != null) {
//设置按钮状态-上一个和下一个按钮设置灰色并且不可以点击
setButtonState();
}
}
2、设置状态的方法同上
四、效果图
1、传入第一个视频,则上一个视频按钮已不可点击