本文章主要參考Google VR中的文檔,如果您能流利的讀懂英文開發(fā)文檔琳省,可以去官網(wǎng)自行查看稀拐。
1.介紹VR View
VR view allows you to embed 360 degree VR media into websites on desktop and mobile, and native apps on Android and iOS. This technology is designed to enable developers of traditional apps to enhance the apps with immersive content.
VR視圖允許你將360度的VR媒體嵌入桌面和移動的網(wǎng)站赡鲜,以及Android和iOS上的原生應用吝镣。這項技術(shù)旨在使傳統(tǒng)應用程序的開發(fā)者能夠通過沉浸式的內(nèi)容來增強應用程序。
VR view supports mono and stereo 360 images and videos. Images and video need to be stored in the equirectangular-panoramic (equirect-pano) format, which is a common format supported by many capture solutions.
VR視圖支持mono和立體圖像和視頻泉蝌。圖像和視頻需要存儲在equi矩形-全景(equirect - pano)格式中歇万,這是許多捕獲解決方案支持的公共格式。
Image規(guī)格
- VR查看圖像可以保存為PNG梨与,JPEG或GIF堕花。Google建議使用JPEG改進壓縮。
- 為了獲得最大的兼容性和性能粥鞋,圖像尺寸應該是2的倍數(shù)(例如缘挽,2048或4096)。
- 單個圖像應為2:1縱橫比(例如4096×2048)呻粹。
- 立體圖像應為1:1縱橫比(例如4096×4096)壕曼。
Mono單個圖像 | Stereo立體圖像 |
---|---|
vr-1.jpg
|
vr-2.jpg
|
先來看看效果:
2.使用VrPanoramaView
嵌入全景圖像
1.build.gradle
在app下的build.gradle
中添加panowidget庫
dependencies {
compile 'com.google.vr:sdk-panowidget:1.10.0'
}
2.AndroiManifest.xml
在使用VrPanoramaView的Acitivity的intent-filter節(jié)點添加過濾分類:
com.google.intent.category.CARDBOARD
: 兼容Cardboard紙盒
<activity android:name=".VrPanoramaActivity" >
<intent-filter>
<category android:name="com.google.intent.category.CARDBOARD" />
</intent-filter>
</activity>
3.布局文件
只需在布局中添加一個控件
<com.google.vr.sdk.widgets.pano.VrPanoramaView
android:id="@+id/pano_view"
android:layout_margin="5dip"
android:layout_width="match_parent"
android:scrollbars="@null"
android:layout_height="250dip" />
4.加載全景圖
A.初始化控件
VrPanoramaView vrPanView = (VrPanoramaView) findViewById(R.id.vr_pan_view);
B.讀取圖片
我們提前將一張選擇好的全景圖放在assets目錄中,aa.jpg,將圖片轉(zhuǎn)為bitmap
/**獲取assets中的圖片等浊,轉(zhuǎn)為流**/
InputStream open = null;
try {
open = getAssets().open("aa.jpg");
} catch (IOException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(open);
C.設置VrPanoramaView.Options
/**VrPanoramaView.Options 設置**/
VrPanoramaView.Options options = new VrPanoramaView.Options();
options.inputType = VrPanoramaView.Options.TYPE_MONO;
VrPanoramaView.Options有兩種類型:
TYPE_MONO 360度單圖(2:1縱橫比)
圖像被預期以覆蓋沿著其水平軸360度腮郊,而垂直范圍是根據(jù)圖像的寬高比來計算。例如筹燕,如果一個1000x250像素的圖像轧飞,給出所述全景將覆蓋360x90度與垂直范圍是-45至+45度。TYPE_STEREO_OVER_UNDER 立體圖(1:1縱橫比)
包含兩個大小相等的投影 全景圖垂直疊加撒踪。頂部圖像被顯示給左眼过咬、底部圖像被顯示給右眼。圖像將覆蓋沿水平軸360度制妄,而垂直范圍是根據(jù)圖像的寬高比來計算掸绞。例如,如果一個1000x500像素的圖像中給出(即1000x250像素每個眼睛)耕捞,全景將覆蓋360x90度與垂直范圍是-45至+45度衔掸。
D.加載全景圖
vrPanView.loadImageFromBitmap(bitmap, options);
E.設置加載監(jiān)聽VrPanoramaEventListener
/**設置加載圖片監(jiān)聽**/
vrPanView.setEventListener(new VrPanoramaEventListener() {
/**
* 顯示模式改變回調(diào)
* 1.默認
* 2.全屏模式
* 3.VR觀看模式,即橫屏分屏模式
*/
@Override
public void onDisplayModeChanged(int newDisplayMode) {
super.onDisplayModeChanged(newDisplayMode);
Log.d(TAG, "onDisplayModeChanged()->newDisplayMode=" + newDisplayMode);
}
/**
* 加載VR圖片失敗回調(diào)
*/
@Override
public void onLoadError(String errorMessage) {
super.onLoadError(errorMessage);
Log.d(TAG, "onLoadError()->errorMessage=" + errorMessage);
}
/**
* 加載VR圖片成功回調(diào)
*/
@Override
public void onLoadSuccess() {
super.onLoadSuccess();
Log.d(TAG, "onLoadSuccess->圖片加載成功");
}
/**
* 點擊VR圖片回調(diào)
*/
@Override
public void onClick() {
super.onClick();
Log.d(TAG, "onClick()");
}
});
F.在onPause俺抽、onResume敞映、onDestroy中做出相應處理
@Override
protected void onPause() {
super.onPause();
vrPanView.pauseRendering();//暫停3D渲染和跟蹤
}
@Override
protected void onResume() {
super.onResume();
vrPanView.resumeRendering();//恢復3D渲染和跟蹤
}
@Override
protected void onDestroy() {
vrPanView.shutdown();//關閉渲染下并釋放相關的內(nèi)存
super.onDestroy();
}
G.一些其他方法
//是否隱藏左下角信息的按鈕
vrPanView.setInfoButtonEnabled(boolean enabled);
//是否隱藏全屏按鈕
vrPanView.setFullscreenButtonEnabled(boolean enabled);
未完,如果遇到新的繼續(xù)添加
最后附上完整代碼:
本文作者: shijiacheng
本文鏈接: http://shijiacheng.studio/2017/06/30/first-RecyclerView/
版權(quán)聲明: 本博客所有文章除特別聲明外磷斧,均為原創(chuàng)文章振愿。請尊重勞動成果诗芜,轉(zhuǎn)載注明出處!
轉(zhuǎn)載請注明:轉(zhuǎn)自http://shijiacheng.studio