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<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 中。這樣全屏切換完美實現



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章