Android中VR全景图项目配置环境和具体项目Demo
来源:互联网 发布:java游戏 编辑:程序博客网 时间:2024/05/17 08:00
VR:virtual reality(虚拟实境)
使用VR组件时,项目需要最低SDK版本为19。
在main下新建文件夹为assets,用于存放资源文件
一、配置VR开发环境步骤:
android:largeHeap="true"
2.在build.gradle里添加最新的依赖文件,下面的三个是后面依赖module产生的。
gradle文件参照sample下的demo来修改
compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'
3.在项目中导入我们所需要的依赖的module,分别是:common、commonwidget、panowidget。
二、基本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、panowidgetpublic 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(); } }}
效果图:
VR的项目及Demo资源下载:点击打开链接
- Android中VR全景图项目配置环境和具体项目Demo
- Android VR 全景图
- 二、H5全景图-朋友圈全景图-720°全景-VR ---- 项目简单分析
- 二、H5全景图-朋友圈全景图-720°全景-VR ---- 项目简单分析
- 二、H5全景图-朋友圈全景图-720°全景-VR ---- 项目简单分析
- 二、H5全景图-朋友圈全景图-720°全景-VR ---- 项目简单分析
- git基本环境配置和创建一个项目Demo
- Android VR Player(全景视频播放器) [1]:项目介绍
- 魔镜VR项目如何嵌入到Android项目中
- 实体环境中配置Android项目Ubuntu开发环境指南
- VR全景图效果
- VR全景图效果
- VR全景图效果
- VR 全景图实现
- Vr (全景图实现)
- 二、VR全景图显示器开发 ---- Android VR视频/Google VR for Android /VR Pano/VR Video
- 四、VR全景图显示器开发 ---- Android VR视频/Google VR for Android /VR Pano/VR Video
- Android开发中Google VR全景的实现
- Android进阶之自定义控件三
- layui
- Win7,64位,Python2.7.2安装matplotlib(whl文件)
- Codeforces 712D Memory and Scores【dp+前缀和】
- Android Canvas
- Android中VR全景图项目配置环境和具体项目Demo
- leetcode-11. Container With Most Water
- JSpatch被苹果封杀,RN (React Native) 会不会就此终结,无缘Apple?
- javascript 定义对象、方法和属性的使用方法(prototype)
- libvlc_media_player_stop死锁问题解决
- webpack的简单使用(一)
- 【WCF】错误处理(一):FaultException 与 FaultReason 的搭配
- 蓝桥杯——算法训练 判定字符位置(Vip试题)
- 201512-2 消除类游戏