先上代碼還是在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
中。這樣全屏切換完美實現