美文网首页
多布局状态下视频自动播放

多布局状态下视频自动播放

作者: 君袅 | 来源:发表于2019-05-07 23:14 被阅读0次

    今天主要说的是节操视频在多布局的状态下自动播放,由于布局没有固定的规则所以不能只判断位置来自动播放,所以使用啦判断子条目中的控件,而且,定义啦一个矩形的框框来判断,如果,你的那个控件到达啦这个框框的范围内,就开始啦自动播放
    implementation 'fm.jiecao:jiecaovideoplayer:5.4'

    正常的滑动监听

            rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    //playVideo就是开启自动播放的方法,另外,一般会添加一个判断是不是wifi状态下
                    if (newState == SCROLL_STATE_IDLE) playVideo(recyclerView);
                    super.onScrollStateChanged(recyclerView, newState);
                }
    
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);滑动范围
                    //可以获取屏幕中展示第一个item的position值
                    int firstPosition = mLayoutManager.findFirstVisibleItemPosition();
                    // 可以获取屏幕中展示最后一个item的position值
                    int lastPosition = mLayoutManager.findLastVisibleItemPosition();
                   //相减就是我们当前看到问获取屏幕中item的条目数
                    visibleCount = lastPosition - firstPosition;
                }
            });
    
        private void playVideo(RecyclerView view) {
            for (int i = 0; i < visibleCount; i++) {
                if (view != null && view.getChildAt(i) != null && view.getChildAt(i).findViewById(R.id.re_shi_kai) != null) {
                    JCVideoPlayerStandard videoPlayer = view.getChildAt(i).findViewById(R.id.re_shi_kai);
                    Rect rect = new Rect();
                    //getLocalVisibleRect(Rect r)方法可以把视图的长和宽映射到一个Rect对象上。
                    videoPlayer.getLocalVisibleRect(rect);
                    int height = videoPlayer.getHeight();
                    if (rect.top == 0 && rect.bottom == height) {
                        if (videoPlayer.currentState == JCVideoPlayer.CURRENT_STATE_NORMAL || videoPlayer.currentState == JCVideoPlayer.CURRENT_STATE_ERROR) {
                            videoPlayer.startButton.performClick();
                               //这个是节操视频自带的开启方式                         
    //                        videoPlayer.startVideo();   
                            BaseApp.getmApplication().mVideoPlayer = videoPlayer;
                        }
                        return;
                    }
                }
            }
            JCVideoPlayer.releaseAllVideos();
            BaseApp.getmApplication().mVideoPlayer = null;
        }
    
    

    我的是在fragment中的多布局 所以在依附的activity暂停失去焦点是要将节操视频关闭

      @Override
        protected void onPause() {
            super.onPause();
             /*
             *  我的是在fragment中的多布局 所以在依附的activity暂停失去焦点是要将节操视频关闭
             *      public static JCVideoPlayerStandard mVideoPlayer;
             *  mVideoPlayer是在BaseApp是需要定义个静态的mVideoPlayer方法就行啦  为了保持在一个视频对象
             * */
            if (BaseApp.mVideoPlayer != null) {
                if (BaseApp.mVideoPlayer.currentState == JCVideoPlayer.CURRENT_STATE_PLAYING) {
                    BaseApp.mVideoPlayer.startButton.performClick();
                   // JCMediaManager.instance().mediaPlayer.pause();
                } else if (BaseApp.mVideoPlayer.currentState == JCVideoPlayer.CURRENT_STATE_PREPARING) {
                    JCVideoPlayer.releaseAllVideos();
                }
            }
        }
    

    但是我的fragment的也是复用的所以在切换时也需要关闭啦视频的播放

    代码和上面一样
    

    相关文章

      网友评论

          本文标题:多布局状态下视频自动播放

          本文链接:https://www.haomeiwen.com/subject/agiuoqtx.html