Android VR 全景图
谷歌的VR:
虚拟实境(英语:virtual reality,缩写为VR),简称虚拟技术,也称虚拟环境,是利用电脑模拟产生一个三维空间的虚拟世界,提供用户关于视觉等感官的模拟,让用户感觉仿佛身历其境,可以及时、没有限制地观察三维空间内的事物。用户进行位置移动时,电脑可以立即进行复杂的运算,将精确的三维世界视频传回产生临场感。该技术集成了计算机图形、计算机仿真、人工智能、感应、显示及网络并行处理等技术的最新发展成果,是一种由计算机技术辅助生成的高技术模拟系统。
VR软件:爱美艺家VR,房总管VR,旅行VR,VR科学馆,百度VR,腾讯炫境VR
功能:增强虚拟现实
VR资源下载
Google VR 技术 官网:(需要翻墙)
点击打开链接
android VR 资源下载网址:
点击打开链接
android VR API:(需要翻墙)
点击打开链接
VR全景图步骤
第一步:搭建VR开发环境,添加资源,修改Gradle,清单文件等
打开Android VR 资源下载网址下载资源
新建一个项目,选择Project目录>app目录>src>main中新建一个Directory命名为assets,用于存放全景图
在清单文件中添加android:largeHeap="true"
因为使用VR的资源很消耗内存,所以我们为了避免OOM的问题,要把警报权限提高,从192提高到512m
在app项目下的build.gradle中添加
compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'
并修改版本号为19
minSdkVersion 19
如果不修改版本号会报一下错误,这个错就是说最低版本不能低于16,故需要修改
导入之前Android VR 资源下载网址下载的库文件:导入三个库文件,commom,commomwidget,panowidget
导入库文件点击File>New>Import Moudle,粘贴库文件路径点击Finish
这里只演示一个,剩下两个以此类推
导入成功后,进行关联三个项目
在主类中按住control+shift+alt+s点击app点击Deoendencies点击+选择第三个关联
在布局文件中输入<Vr,如果出现以下代码表示关联成功
<com.google.vr.sdk.widgets.pano.VrPanoramaView android:layout_width="match_parent" android:layout_height="match_parent"> </com.google.vr.sdk.widgets.pano.VrPanoramaView>
搭建VR开发环境到此结束
第二步:完成项目XML布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.cxy.vr_cxy.MainActivity"><com.google.vr.sdk.widgets.pano.VrPanoramaView android:id="@+id/vp_view" android:layout_width="match_parent" android:layout_height="match_parent"></com.google.vr.sdk.widgets.pano.VrPanoramaView> </RelativeLayout>
第三步:编写主类MainActivity,自定义AsyncTask,读取和显示VR全景图, 对VR消耗资源进行优化,监听VR运行状态,播放VR效果
package com.example.cxy.vr_cxy;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;public class MainActivity extends AppCompatActivity {private VrPanoramaView mVrPanoramaView;private ImagerLoaderTask mImagerLoaderTask;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//A.对VR控件初始化 mVrPanoramaView = (VrPanoramaView) findViewById(R.id.vp_view);//隐藏掉VR效果左下角的信息按钮显示 mVrPanoramaView.setInfoButtonEnabled(false);//隐藏掉VR效果右下角全屏显示的按钮 mVrPanoramaView.setFullscreenButtonEnabled(false);//切换VR的模式 参数VrWidgetView.DisplayMode.FULLSCREEN_STEREO设备模式(手机横着放) VrWidgetView.DisplayMode.FULLSCREEN_MONO:手机模式 mVrPanoramaView.setDisplayMode(VrWidgetView.DisplayMode.FULLSCREEN_STEREO);//C.设置对VR运行状态的监听,如果VR运行出现错误,可以及时处了. mVrPanoramaView.setEventListener(new MyVREventListener());//B.使用自定义的AsyncTask,播放VR效果 mImagerLoaderTask = new ImagerLoaderTask();mImagerLoaderTask.execute();}//因为读取VR的资源是一个耗时操作(VR资源非常大,读取需要时间),所以我们不能够在主线程去做读取,但是只有在主线程才能做UI的更新,故我们使用AsyncTask. private class ImagerLoaderTask extends AsyncTask<Void, Void, Bitmap> {//以后EventBus去替代. //B.该方法在子线程运行,从本地文件中把资源加载到内存中 @Override protected Bitmap doInBackground(Void... voids) {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) {//创建bVrPanoramaView.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对象,决定显示的效果 mVrPanoramaView.loadImageFromBitmap(bitmap, options);super.onPostExecute(bitmap);}}//因为VR很占用内存,所以当界面进入onPause状态,暂停VR视图显示,进入onResume状态,继续VR视图显示,进入OnDestroy,杀死VR,关闭异步任务 //当失去焦点时,回调 @Override protected void onPause() {//暂停渲染和显示 mVrPanoramaView.pauseRendering();super.onPause();}//当重新获取到焦点时,回调 @Override protected void onResume() {super.onResume();//继续渲染和显示 mVrPanoramaView.resumeRendering();}//当Activity销毁时,回调 @Override protected void onDestroy() {//关闭渲染视图 mVrPanoramaView.shutdown();if (mImagerLoaderTask != null) {//在退出activity时,如果异步任务没有取消,就取消 if (!mImagerLoaderTask.isCancelled()) {mImagerLoaderTask.cancel(true);}}super.onDestroy();}//VR运行状态监听类,自定义一个类继承 private class MyVREventListener extends VrPanoramaEventListener {//当VR视图加载成功的时候回调 @Override public void onLoadSuccess() {super.onLoadSuccess();Toast.makeText(MainActivity.this, "加载成功", Toast.LENGTH_SHORT).show();}//当VR视图加载失败的时候回调 @Override public void onLoadError(String errorMessage) {super.onLoadError(errorMessage);Toast.makeText(MainActivity.this, "加载失败", Toast.LENGTH_SHORT).show();}} }
VR步骤总结
1.在项目里新建一个资产目录assets,把图片放入资产目录下,
2.在清单文件下Application节点中加入android:largeHeap="true"的属下节点.
3.导入VR需要依赖的library库,以导model的方式去导入:Common,Commonwidge,Panowidget
4.在Module的build.gradle文件里dependencies,添加:compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'
5.完成项目XML布局,VrPanoramaView
6.由于VR资源数据量大,获取需要时间,故把加载图片放到子线程中进行,主线程来显示图片,可以使用一个异步线程AsyncTask或EventBus技术完成
7.因为VR很占用内存,所以当界面进入onPause状态,暂停VR视图显示,进入onResume状态,继续VR视图显示,进入onDestroy状态,杀死VR,关闭异步任务
8.设置对VR运行状态的监听,如果VR运行出现错误,可以及时的处理.
9.播放VR效果,只需执行异步任务即可.
Android VR 全景图相关推荐
- Android google VR全景图导航
Android google VR全景图导航 VR导航我们接入的是google vr的,其官方网站为https://github.com/googlevr/gvr-android-sdk ...
- Google VR Views实战(VR全景图播放器)
Google VR SDK 支持daydream和Cardboard. 环境搭建 android studio 环境,2.2.2或者更高 android sdk版本在25以上 gradle 23.0. ...
- Tango+Daydream,刀剑合璧的Android VR开发
Tango+Daydream,刀剑合璧的Android VR开发 2017-01-03 随着ASUS在CES2017上宣布了全球第一款同时具有Tango和Daydream两种能力的ZenFone AR ...
- VR全景图在家装行业的应用及发展
VR全景家装,VR全景图运用将改变家装制造行业的展现方法.近几年不论是资产.技术性還是创业人都已经涌进这一行业.尽管高新科技圈早就刮起VR风潮,但商品与大家日常生活尚离得很远,一般顾客无法碰触.但是, ...
- 如何让图片变成全景图,vr全景图怎么拍摄和制作
现在我们每天都会看很多的图片,例如山水图.景区图.动物图等等.不知道有没有人看到过这样的图片,vr全景图,全景图顾名思义就是看图片的任意一个视角,就会有朋友比较疑惑问全景图如何制作的呢.今天就由小酷给 ...
- 一键生成VR全景图展示
VR全景图,英文名(Panorama),又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体最大的区别是"可操作,可交互". 全景分为虚拟现实和3D全景两种 ...
- 疫情在家,全球 3万个景区 VR全景图,免费看。
最近疫情不能出门, 在家确实是闲的有点无聊, 我给筒子们整理了全球 三万个景点的VR全景图,可以在家看啦~ 我把好看的链接整合在这篇文章里了, 筒子们需要看哪个全景图, 复制链接在浏览器里面打开就可以 ...
- android vr播放器 开发,Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放...
本文将带你了解Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放,希望本文对大家学Android有所帮助. Androi ...
- 什么是全景图?如何进行vr全景图拍摄
照片可以记录生活中的精彩的片段,而且照片的种类也分为很多,比如人像图,美食图,风景图等,其中有一种照片称为大像素全景图,大像素是全景的一种比较超高清的全景图,他不仅可以保留vr全景技术的所有特点,而且 ...
最新文章
- apache与tomcat的联系
- Android简单实现BroadCastReceiver广播机制
- Kube Controller Manager 源码分析
- java samphore 连接池_ADOConnection数据库连接池
- python特性 property_python特性property
- RxJava学习总结
- 中控H10考勤机管理员密码破解
- 转-Tensorflow之GPU和CPU
- 流媒体服务器原理和架构解析
- mac笔记本怎么外接显示屏_Mac电脑外接显示器全攻略
- 微信朋友圈限时推广微视,腾讯对短视频志在必得?
- Liunx中mysql服务
- 【浏览器】解决火狐和Chrome上不了网,只有IE能上网的问题
- Windows离线安装Rust
- 32/64位系统支持多大内存
- 几种论文排版工具(texlive, amot, texmaker)——新手的摸索过程
- c35是什么意思_混凝土c25、c30、c35分别代表什么意思?
- 关于前端框架vue/react及UI框架的配合
- 2023北方工业大学计算机考研信息汇总
- 35场面试,应届计算机毕业生的霸气求职之路