Android自定义视频播放器(四)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxd1435513775/article/details/81562032

参看: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<String> list;
private int position;
list= (ArrayList<String>) 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、传入第一个视频,则上一个视频按钮已不可点击
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zxd1435513775/article/details/81562032