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

2019-05-07  本文已影响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的也是复用的所以在切换时也需要关闭啦视频的播放

代码和上面一样
上一篇下一篇

猜你喜欢

热点阅读