先看一下效果圖,如果對google vr有一定了解的朋友,會對這種效果感興趣的!(將我們的控制界面添加到VR模式中,目前單純的集成google vr肯定是做不了這種效果的)
google vr視頻播放共有三種模式,我們可控制的只有第一種模式,其它兩種模式我們可以調(diào)用api進(jìn)入這種模式,僅此而已。
三種模式的官網(wǎng)鏈接
我的前兩篇google vr入門博客中使用的就是第一種模式,它不是全屏的,從它的命名EMBEDDED,我們知道它是用來嵌入到某一個布局頁面中的,雖然我們可以用這種模式做出全屏的效果,但這不是我們想要的VR!!!真正的VR是2、3這兩種模式。
讀者可能會想,我們可以通過setDisplayMode (int newDisplayMode)方法進(jìn)入2、3模式啊!沒錯,可以(之前的兩篇博客中都是這么做的),這種做法與我今天給出的效果有以下區(qū)別:
1.全屏模式(2或者3)中沒有控制界面,即不能在全屏模式下控制視頻的暫停,進(jìn)度等;
2.由模式1切換到全屏模式(2或者3)屏幕會閃一下,黑閃一下,切換很不流暢;
3.不能從全屏模式(2或者3)直接退出播放,默認(rèn)從全屏退出只能退到模式1。
以上三點(diǎn)我們之前的兩篇博客中都做不了,但是現(xiàn)在我們可以做到了,并不是又發(fā)現(xiàn)了什么新的api,而是我經(jīng)過研究分析之后反編譯了google vr其中一個包中的源碼,目前來看,不改源碼上面的三點(diǎn)還是實(shí)現(xiàn)不了的。
我們先看看我們使用google vr在build.gradle文件中添加了哪些依賴包
// 使用google vr 添加的
compile ‘com.google.vr:sdk-base:1.40.0’
compile ‘com.google.vr:sdk-audio:1.40.0’
compile ‘com.google.vr:sdk-videowidget:1.40.0’
添加這些依賴包之后google給我們的生成了哪些library庫呢?
我們看到共生成了5個library庫,我們反編譯藍(lán)色背景的這個,并且做一系列的修改,再結(jié)合我們之前的播放器把播放控制頁面添加到VrWidgetView里面的一個innerWidgetView上便可以了。
下面是VrWidgetView中的init()方法(它是VrWidgetView的核心方法,也是我們主要需要改動的)
private void init() {
this.displayMode = 1;
this.viewerParamsProvider = VrParamsProviderFactory.create(getContext());
this.sensorsHelper = new TrackingSensorsHelper(getContext().getPackageManager());
boolean z = (this.sensorsHelper.areTrackingSensorsAvailable() || this.sensorsHelper.showStereoModeButtonForTesting()) ? true : DEBUG;
this.isStereoModeButtonEnabled = z;
this.isFullscreenButtonEnabled = true;
this.isInfoButtonEnabled = true;
this.isTouchTrackingEnabled = true;
this.isTransitionViewEnabled = true;
this.screenOnFlagHelper = new ScreenOnFlagHelper(this.activity);
Display display = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
this.displayMetrics = new DisplayMetrics();
display.getRealMetrics(this.displayMetrics);
initializeRenderingView(display.getRotation());
this.innerWidgetView = new FrameLayout(getContext());
this.innerWidgetView.setId(R.id.vrwidget_inner_view);
this.innerWidgetView.addView(this.renderingView);
//播放器控制界面
View inflate = View.inflate(getContext(), R.layout.vr_player_control, null);
innerWidgetView.addView(inflate);
setPadding(0, 0, 0, 0);
addView(this.innerWidgetView);
this.orientationHelper = new OrientationHelper(this.activity);
this.fullScreenDialog = new FullScreenDialog(getContext(), this.innerWidgetView, this.renderer);
//為解決點(diǎn)擊系統(tǒng)back鍵退出播放器而加
this.fullScreenDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mPlayerActivity != null) {//監(jiān)聽dialog返回鍵,并作相應(yīng)的處理
//解決播放視頻時,QQ來電后,進(jìn)入QQ界面,點(diǎn)擊返回退出播放的問題
boolean finish = fullScreenDialog.dialogIsFocus();
//是否退出播放器取決于dialog是否失去焦點(diǎn)(失去不退出)
mPlayerActivity.performBackPressed(finish);
if (!finish) {
//dialog失去焦點(diǎn)未退出播放器,將焦點(diǎn)標(biāo)記改為true,已經(jīng)從其他應(yīng)用返回到播放器界面了
fullScreenDialog.setDialogIsFocus(true);
return true;
}
}
return false;
}
});
this.uiView = inflate(getContext(), R.layout.ui_view_embed, null);
this.viewRotator = new ViewRotator(getContext(), this.uiView, getScreenRotationInDegrees(display.getRotation()), this.sensorsHelper.areTrackingSensorsAvailable());
this.innerWidgetView.addView(this.uiView);
this.innerWidgetView.addView(new View(getContext()));
this.vrUiLayer = new UiLayer(getContext());
this.vrUiLayer.setPortraitSupportEnabled(true);
this.vrUiLayer.setEnabled(true);
this.innerWidgetView.addView(this.vrUiLayer.getView());
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)初中級Android工程師,想要提升技能,往往是自己摸索成長或者是報(bào)班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動則近萬的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Android移動開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Android開發(fā)知識點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會持續(xù)更新!
如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ⅲ篈ndroid)

總結(jié)
我最近從朋友那里收集到了2020-2021BAT 面試真題解析,內(nèi)容很多也很系統(tǒng),包含了很多內(nèi)容:Android 基礎(chǔ)、Java 基礎(chǔ)、Android 源碼相關(guān)分析、常見的一些原理性問題
等等,可以很好地幫助大家深刻理解Android相關(guān)知識點(diǎn)的原理以及面試相關(guān)知識。
這份資料把大廠面試中常被問到的技術(shù)點(diǎn)整理成了PDF,包知識脈絡(luò) + 諸多細(xì)節(jié);還有 高級架構(gòu)技術(shù)進(jìn)階腦圖 幫助大家學(xué)習(xí)提升進(jìn)階,也節(jié)省大家在網(wǎng)上搜索資料的時間來學(xué)習(xí),也可以分享給身邊好友一起學(xué)習(xí)。
這里也分享給廣大面試同胞們,希望每位程序猿們都能面試成功~
Android 基礎(chǔ)知識點(diǎn)
Java 基礎(chǔ)知識點(diǎn)
Android 源碼相關(guān)分析
常見的一些原理性問題
騰訊、字節(jié)跳動、阿里、百度等BAT大廠 2019-2020面試真題解析文章來源:http://www.zghlxwxcb.cn/news/detail-849274.html
《Android學(xué)習(xí)筆記總結(jié)+移動架構(gòu)視頻+大廠面試真題+項(xiàng)目實(shí)戰(zhàn)源碼》,點(diǎn)擊傳送門即可獲??!
[外鏈圖片轉(zhuǎn)存中…(img-EHxHHlBA-1711858907567)]
騰訊、字節(jié)跳動、阿里、百度等BAT大廠 2019-2020面試真題解析
[外鏈圖片轉(zhuǎn)存中…(img-j2Vlojgr-1711858907567)]文章來源地址http://www.zghlxwxcb.cn/news/detail-849274.html
《Android學(xué)習(xí)筆記總結(jié)+移動架構(gòu)視頻+大廠面試真題+項(xiàng)目實(shí)戰(zhàn)源碼》,點(diǎn)擊傳送門即可獲取!
到了這里,關(guān)于google vr 入門之制作簡易的VR播放器(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!