jiecaovideo开源项目笔记-JCVideoPlayer分析-全屏逻辑

先上代码还是在onClick方法中

 if (i == R.id.fullscreen) {
            Log.i(TAG, "onClick fullscreen [" + this.hashCode() + "] ");
            if (currentState == CURRENT_STATE_AUTO_COMPLETE) return;//应该是播放完瞬间点?
            if (currentScreen == SCREEN_WINDOW_FULLSCREEN) {
                //quit fullscreen  退出全屏
                backPress();
            } else {
                Log.d(TAG, "toFullscreenActivity [" + this.hashCode() + "] ");
                onEvent(JCBuriedPoint.ON_ENTER_FULLSCREEN);
                startWindowFullscreen();
            }
        } 

主要也就看backPress和  startWindowFullscreen方法

startWindowFullscreen进入全屏。

 ViewGroup vp = (ViewGroup) (JCUtils.scanForActivity(getContext())).findViewById(Window.ID_ANDROID_CONTENT);

 这个是获取当前的activity的最根布局


跟着是这两行代码。有些同学就蒙B了

 Constructor constructor = (Constructor) JCVideoPlayer.this.getClass().getConstructor(Context.class);
 final JCVideoPlayer jcVideoPlayer = constructor.newInstance(getContext());

这两句话的含义其实就是获取当前JCVideoPlayer的子类,然后构造一个JCVideoPlayer的子类。然后接着这个实例,添加在vp中。这样就实现了全屏,之前的view都被当前的JCVideoPlayer子类覆盖掉。


JCVideoPlayerManager.setLastListener(this);
JCVideoPlayerManager.setListener(jcVideoPlayer);
上篇博客说了addTextureView方法会重新设置视频输出对象。当前 JCVideoPlayer已经显示在界面中,但是屏幕输出还不是在现在new的jcVideoPlayer 中。简单设置下jcVideoPlayer.addTextureView,调用这个方法视频输出自然会显示在全屏界面。上面的listener的切换是为了把JCMediaManager中的加载(这个加载在切换全屏的时候完全正常运行)的进度以及各种状态回调到jcVideoPlayer 中。这样全屏切换完美实现



你可能感兴趣的:(jiecaovideo开源项目笔记-JCVideoPlayer分析-全屏逻辑)