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

来源:互联网 发布:网络教学有什么特点 编辑:程序博客网 时间:2024/06/04 18:00

先上代码还是在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<JCVideoPlayer> constructor = (Constructor<JCVideoPlayer>) 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 中。这样全屏切换完美实现



0 0
原创粉丝点击