仿抖音列表

下面是自己写的防抖音列表,包括:

  • 可上下滑动播放视频
  • 播放完当前视频,自动播放下一个
  • 仿抖音评论列表
  • 节操播放器的简单使用

下面是两张效果图:

     

下面是下载地址:

GitHub 下载地址:https://github.com/wuqingsen/DouYinWu

CSDN 下载地址:https://download.csdn.net/download/wuqingsen1/11006993

看完效果图,来看下是如何实现的;

下面是设置 adapter 时主要的代码:

        //设置adapter
        adapter = new VideoAdapter(MainActivity.this, myData);
        recyclerView.setAdapter(adapter);
        mLayoutManager = new PagerLayoutManager(this, OrientationHelper.VERTICAL);
        recyclerView.setLayoutManager(mLayoutManager);
        mLayoutManager.setOnViewPagerListener(new OnViewPagerListener() {
            @Override
            public void onInitComplete(View view) {
                //点击进入 0
                playVideo(view, false);
            }

            @Override
            public void onPageSelected(int position, boolean isBottom, View view) {
                positionClick = position;
                //滑动选择 1
                playVideo(view, isBottom);
            }

            @Override
            public void onPageRelease(boolean isNext, int position, View view) {
                //暂停上一个播放
//                releaseVideo(view);
            }
        });

上面代码自定义了 PagerLayoutManager ,它继承于 LinearLayoutManager ;

在这个类中,重写了手势滑动,也就是上下滑动;以及选中当前 item 后,onPageSelected 作为回调,在里面开始播放当前页的视频。

再看下 playVideo 方法中代码:

    /**
     * 开始播放 & 监听播放完成
     */
    private void playVideo(View view, boolean isBottom) {
        if (view != null) {
            jzVideo = view.findViewById(R.id.jzVideo);
            jzVideo.startVideo();
            if (isBottom) {
                //到最后一个加载第二页
                myData.add("http://static.gamemm.com/upload/video/20180914/14039_1536897206.mp4");
                myData.add("http://static.gamemm.com/upload/video/20180810/14078_1533870358.mp4");
                myData.add("http://static.gamemm.com/upload/video/20180914/14039_1536897206.mp4");
                myData.add("http://static.gamemm.com/upload/video/20180810/14078_1533870358.mp4");
                myData.add("http://static.gamemm.com/upload/video/20180914/14039_1536897206.mp4");
                myData.add("http://static.gamemm.com/upload/video/20180810/14078_1533870358.mp4");
                adapter.notifyDataSetChanged();
            }
            jzVideo.setFinishListerer(new MyVideoPlayer.OnItemClickListener() {
                @Override
                public void onItemClick() {
                    //播放完成自动播放下一个,用户没有看评论列表可以播放下一个
                    if (isScroll) {
                        smoothMoveToPosition(recyclerView, positionClick++);
                    }
                }
            });
        }
    }

这个方法也很简单,获取到当前显示 item 中的视频播放器,然后开始播放视频,当播放到最后一个视频时,加载第二页内容以及更新 adapter ;

最后监听视频是否播放结束,播放结束后,滑动到下一个并播放。

猜你喜欢

转载自blog.csdn.net/wuqingsen1/article/details/88353597