VR开发基础—全景图

1、导入谷歌官方提供的库:
commonwidget、common、panowidget(全景图)、videowidget(视频)
或者添加依赖:
dependencies {
compile project(':libraries-common')
compile project(':libraries-commonwidget')
compile project(':libraries-panowidget')
}
版本要求:
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22" />
2、配置清单文件:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application android:label="SimpleVrPanoramaActivity"
android:largeHeap="true"
android:theme="@android:style/Theme.Holo.Light">
<activity android:name=".SimpleVrPanoramaActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="com.google.intent.category.CARDBOARD" />
</intent-filter>
</activity>
</application>
3、布局加载 全景资源(图片)控件
<com.google.vr.sdk.widgets.pano.VrPanoramaView
android:id="@+id/picView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.google.vr.sdk.widgets.pano.VrPanoramaView>
4、初始化控件以及监控加载事件
public class SimpleVrPanoramaActivity extends Activity {
private static final String TAG = "VrPanorama";
private VrPanoramaView panoWidgetView;//上面说的Google提供给我们现实全景图片的View
private String fileUri = "first.jpg";//assets文件夹下的文件名
private Options panoOptions = new Options();//VrPanoramaView需要的设置
private ImageLoaderTask backgroundImageLoaderTask;//异步加载图片
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
panoWidgetView = (VrPanoramaView) findViewById(R.id.pano_view);//初始化VrPanoramaView
panoWidgetView.setEventListener(new ActivityEventListener());//为VrPanoramaView添加监听
//如果有任务在执行则停止它
if (backgroundImageLoaderTask != null) {
backgroundImageLoaderTask.cancel(true);
}
//设置inputType 为TYPE_STEREO_OVER_UNDER.
panoOptions.inputType = Options.TYPE_STEREO_OVER_UNDER;
//创建一个任务
backgroundImageLoaderTask = new ImageLoaderTask();
//执行任务。将图片名(根据项目实际情况传)和设置传入
backgroundImageLoaderTask.execute(Pair.create(fileUri, panoOptions));
}
//异步任务
class ImageLoaderTask extends AsyncTask<Pair<String, Options>, Void, Boolean> {
@Override
protected Boolean doInBackground(Pair<String, Options>... fileInformation) {
InputStream istr = null;
try {
istr = getAssets().open(fileInformation[0].first);//获取图片的输入流
     Bitmap bitmap = BitmapFactory.decodeStream(istr);//创建bitmap
     //参数一为图片的bitmap,参数二为 VrPanoramaView 所需要的设置
     panoWidgetView.loadImageFromBitmap(bitmap, fileInformation[0].second);
} catch (IOException e) {
Log.e(TAG, "Could not decode default bitmap: " + e);
return false;
}finally{
     try {
     istr.close();//关闭InputStream
     } catch (IOException e) {//...}
            }
return true;
}
}
private class ActivityEventListener extends VrPanoramaEventListener {
@Override
public void onLoadSuccess() {//图片加载成功
Log.e(TAG, "onLoadSuccess");
}
@Override
public void onLoadError(String errorMessage) {//图片加载失败
Log.e(TAG, "Error loading pano: " + errorMessage);
}
@Override
public void onClick() {//当我们点击了VrPanoramaView 时候出发
super.onClick();
Log.e(TAG, "onClick");
}
@Override
public void onDisplayModeChanged(int newDisplayMode) {//改变显示模式时候出发(全屏模式和纸板模式)
super.onDisplayModeChanged(newDisplayMode);
Log.e(TAG, "onDisplayModeChanged");
}
}
@Override
protected void onPause() {
panoWidgetView.pauseRendering();//暂停3D渲染和跟踪
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
panoWidgetView.resumeRendering();//恢复3D渲染和跟踪
}
@Override
protected void onDestroy() {
panoWidgetView.shutdown();//关闭渲染下并释放相关的内存
if (backgroundImageLoaderTask != null) {
backgroundImageLoaderTask.cancel(true);//停止异步任务
}
super.onDestroy();
}
}
5、界面其他元素设置:
setFullscreenButtonEnabled (false); //隐藏全屏模式按钮
setVrModeButtonEnabled(false); //隐藏VR模式按钮
vrImage.setInfoButtonEnabled(false);//隐藏信息按钮
6、Options参数:
public static final int TYPE_MONO = 1;
  • 图像被预期以覆盖沿着其水平轴360度,而垂直范围是根据图像的宽高比来计算。
  • 例如,如果一个1000x250像素的图像,给出所述全景将覆盖360x90度与垂直范围是-45至+45度
public static final int TYPE_STEREO_OVER_UNDER = 2;
  • 包含两个大小相等的投影 全景图垂直叠加。顶部图像被显示给左眼、底部图像被显示给右眼
  • 图像将覆盖沿水平轴360度,而垂直范围是根据图像的宽高比来计算。
  • 例如,如果一个1000x500像素的图像中给出(即1000x250像素/每个眼睛),全景将覆盖360x90度与垂直范围是-45至+45度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值