赞
踩
VR:virtual reality(虚拟实境)
一、配置VR开发环境步骤:
android:largeHeap="true"
2.在build.gradle里添加最新的依赖文件,下面的三个是后面依赖module产生的。
gradle文件参照sample下的demo来修改
compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'
二、基本VR创建步骤与使用的具体代码
步骤如下:
0.0 在项目里新建一个资产目录assets,把图片放入资产目录下,
1.0 在清单文件下Application节点中加入android:largeHeap="true"的属下节点.
2.0 导入VR需要依赖的library库,以导model的方式去导入:Common,Commonwidge,Panowidget
3.0 在Module的build.gradle文件里dependencies,添加:compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'
4.0 完成项目XML布局,VrPanoramaView
5.0 由于VR资源数据量大,获取需要时间,故把加载图片放到子线程中进行,主线程来显示图片,可以使用一个异步线程AsyncTask或EventBus技术完成
6.0 因为VR很占用内存,所以当界面进入onPause状态,暂停VR视图显示,进入onResume状态,继续VR视图显示,进入onDestroy状态,杀死VR,关闭异步任务
7.0 设置对VR运行状态的监听,如果VR运行出现错误,可以及时的处理.
8.0 播放VR效果,只需执行异步任务即可.
代码如下:
MainActivity.java
- package com.zhiyuan3g.vr;
-
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.widget.Toast;
-
- import com.google.vr.sdk.widgets.common.VrWidgetView;
- import com.google.vr.sdk.widgets.pano.VrPanoramaEventListener;
- import com.google.vr.sdk.widgets.pano.VrPanoramaView;
-
- import java.io.IOException;
- import java.io.InputStream;
-
-
- //导入三个库文件:common、commonwidget、panowidget
- public class MainActivity extends AppCompatActivity {
-
- private VrPanoramaView vp_view;
- private ImageLoderTask mImageLoderTask;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- }
-
- private void initView() {
- //A.实例化控件
- vp_view = (VrPanoramaView) findViewById(R.id.vp_view);
-
- //C.使用自定义的AsyncTask,播放VR效果
- mImageLoderTask = new ImageLoderTask();
- mImageLoderTask.execute();
-
-
- //隐藏掉VR左下角的信息按钮显示
- vp_view.setInfoButtonEnabled(false);
- //隐藏VR右下角全屏显示的按钮显示
- vp_view.setFullscreenButtonEnabled(false);
- //切换VR的模式 参数:VrWidgetView.DisplayMode.FULLSCREEN_STEREO ->设备模式(横屏,会出现两个眼球视图)
- //参数:VrWidgetView.DisplayMode.FULLSCREEN_MONO:正常模式(竖屏)
- vp_view.setDisplayMode(VrWidgetView.DisplayMode.FULLSCREEN_STEREO);
-
- //设置对VR运行状态的监听,如果VR运行出现错误,可以及时处理
- vp_view.setEventListener(new MyVREventListener());
- }
-
- //因为读取VR资源是耗时操作(资源大,耗费大量时间),所以我们不能再主线程去做读取,
- //但是只有主线程能更新UI,所有我们使用AsyncTask
- private class ImageLoderTask extends AsyncTask<Void, Void, Bitmap> {//以后用EventBus替代
- //B.该方法在子线程运行,从本地文件中把资源加载到内存中
- @Override
- protected Bitmap doInBackground(Void... params) {
- try {
- //从资源目录中拿到资源,返回结果是字节流
- InputStream inputStream = getAssets().open("andes.jpg");
- //把字节流转换成Bitmap对象
- Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
- return bitmap;
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return null;
- }
-
- @Override
- protected void onPostExecute(Bitmap bitmap) {
- //创建VrPanoramaView.Options,去决定显示VR时普通效果,还是立体效果
- VrPanoramaView.Options options = new VrPanoramaView.Options();
- //TYPE_STEREO_OVER_UNDER立体效果:图片上半部分放在左眼显示,下半部放在右眼显示 TYPE_MONO:普通效果
- options.inputType = VrPanoramaView.Options.TYPE_STEREO_OVER_UNDER;
- //使用VR控件对象,显示效果,参数1:Bitmap对象 2:vrPanoramaView.Options对象,决定显示效果
- vp_view.loadImageFromBitmap(bitmap,options);
- super.onPostExecute(bitmap);
- }
- }
-
- //因为VR很占用内存,所以当界面进入onPause状态,暂停VR视图显示,进入onResume状态,继续VR视图的显示,
- //进入onDestroy,杀死VR,关闭异步任务
- //当失去焦点时,回调
-
- @Override
- protected void onPause() {
- //暂停渲染和显示
- vp_view.pauseRendering();
- super.onPause();
- }
-
- //当重新获取到焦点时,回调
-
- @Override
- protected void onResume() {
- super.onResume();
- //继续渲染和显示
- vp_view.resumeRendering();
- }
-
- //当Activity销毁时,回调
- @Override
- protected void onDestroy() {
- //关闭渲染视图
- vp_view.shutdown();
- if (mImageLoderTask != null) {
- //在退出Activity时,如果异步任务没有取消,就取消
- if (!mImageLoderTask.isCancelled()) {
- mImageLoderTask.cancel(true);
- }
- }
- super.onDestroy();
- }
-
-
- //VR运行状态监听类
- private class MyVREventListener extends VrPanoramaEventListener {
-
- //当VR视图加载成功的时候,回调
- @Override
- public void onLoadSuccess() {
- super.onLoadSuccess();
- Toast.makeText(getApplicationContext(), "加载成功!!", Toast.LENGTH_SHORT).show();
- }
-
- //当VR视图加载失败的时候,回调
-
- @Override
- public void onLoadError(String errorMessage) {
- super.onLoadError(errorMessage);
- Toast.makeText(getApplicationContext(), "加载失败!!!", Toast.LENGTH_SHORT).show();
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
VR的项目及Demo资源下载:点击打开链接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。