Android利用递归实现上下分屏幕播放视频

最近遇到了一个比较奇葩的需求:要求一个屏幕分上下两屏来显示不同的视频,视频有很多段,我把它们组成一个list或者一个数组,然后让上下两个VideoView分别以单、双数的方式循环这些视频,我做的初始模型比较简单,是根据递归调用方式来实现的,这个代码比较简单,不考虑性能和美观,做一个简单处理。

首先第一步在布局中分上下两个VideoView:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
         

            <VideoView
                android:id="@+id/videoview_1"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_gravity="center"
                android:layout_weight="1" />
	
            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@android:color/white" />

            <VideoView
                android:id="@+id/videoview_2"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_gravity="center"
                android:layout_weight="1" />
    
    </LinearLayout>
第二步在Activity中初始化这两个控件:

mVideoView_1 = (VideoView) findViewById(R.id.videoview_1);
mVideoView_2 = (VideoView) findViewById(R.id.videoview_2);
videosList = new ArrayList<String>();
		for (int i = 0; i < videos.length; i++) {
			String uri_one = "android.resource://" + getPackageName() + "/" + videos[i];
			videosList.add(uri_one);
		}

这里我取用了四个短视频,然后再把它们一一add到videosList中:

private int[] videos = { R.raw.video1, R.raw.video2, R.raw.video3,
			R.raw.video4};

第三步是利用递归来实现我们的分屏幕播放,在我们的方法当中传参当前要播放的VideoView,以及我们的videosList,最后一个参数是我们的起始播放position:

private void videoView_Play(final VideoView videoView, final List<String> videosList, final int position) {

		videoView.setVideoURI(Uri.parse(videosList.get(position)));
		videoView.setOnPreparedListener(new OnPreparedListener() {

			@Override
			public void onPrepared(MediaPlayer mp) {
				// TODO Auto-generated method stub
				videoView.start();
			}
		});
		videoView.setOnErrorListener(new OnErrorListener() {

			@Override
			public boolean onError(MediaPlayer mp, int what, int extra) {
				// TODO Auto-generated method stub
				return false;
			}
		});
		//播放成功完成之后
		videoView.setOnCompletionListener(new OnCompletionListener() {

			@Override
			public void onCompletion(MediaPlayer mp) {
				// TODO Auto-generated method stub
				if (position + 2 < videosList.size()) {
					//递归回调
					videoView_Play(videoView, videosList, position + 2);
				} else {//检查是否播放完成,开始循环播放
					if (position % 2 == 0) {
						videoView_Play(videoView, videosList, 0);
					} else if (position % 2 == 1) {
						videoView_Play(videoView, videosList, 1);
					}
				}
				
			}
		});
	}

最后,我们在我们需要的地方进行这个递归方法的调用就可以了

videoView_Play(mVideoView_1, videosList, 0);
videoView_Play(mVideoView_2, videosList, 1);
mVideoView_1负责实现第1、3、5、7......视频的播放并循环;

mVideoView_2负责实现第2、4、6、8......视频的播放并循环;

这样功能就实现了,代码比较low,自己摸索的,希望大家多给给相关改进意见,O(∩_∩)O谢谢

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值