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 全景图相关推荐

  1. Android google VR全景图导航

    Android google VR全景图导航        VR导航我们接入的是google vr的,其官方网站为https://github.com/googlevr/gvr-android-sdk ...

  2. Google VR Views实战(VR全景图播放器)

    Google VR SDK 支持daydream和Cardboard. 环境搭建 android studio 环境,2.2.2或者更高 android sdk版本在25以上 gradle 23.0. ...

  3. Tango+Daydream,刀剑合璧的Android VR开发

    Tango+Daydream,刀剑合璧的Android VR开发 2017-01-03 随着ASUS在CES2017上宣布了全球第一款同时具有Tango和Daydream两种能力的ZenFone AR ...

  4. VR全景图在家装行业的应用及发展

    VR全景家装,VR全景图运用将改变家装制造行业的展现方法.近几年不论是资产.技术性還是创业人都已经涌进这一行业.尽管高新科技圈早就刮起VR风潮,但商品与大家日常生活尚离得很远,一般顾客无法碰触.但是, ...

  5. 如何让图片变成全景图,vr全景图怎么拍摄和制作

    现在我们每天都会看很多的图片,例如山水图.景区图.动物图等等.不知道有没有人看到过这样的图片,vr全景图,全景图顾名思义就是看图片的任意一个视角,就会有朋友比较疑惑问全景图如何制作的呢.今天就由小酷给 ...

  6. 一键生成VR全景图展示

    VR全景图,英文名(Panorama),又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体最大的区别是"可操作,可交互". 全景分为虚拟现实和3D全景两种 ...

  7. 疫情在家,全球 3万个景区 VR全景图,免费看。

    最近疫情不能出门, 在家确实是闲的有点无聊, 我给筒子们整理了全球 三万个景点的VR全景图,可以在家看啦~ 我把好看的链接整合在这篇文章里了, 筒子们需要看哪个全景图, 复制链接在浏览器里面打开就可以 ...

  8. android vr播放器 开发,Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放...

    本文将带你了解Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放,希望本文对大家学Android有所帮助. Androi ...

  9. 什么是全景图?如何进行vr全景图拍摄

    照片可以记录生活中的精彩的片段,而且照片的种类也分为很多,比如人像图,美食图,风景图等,其中有一种照片称为大像素全景图,大像素是全景的一种比较超高清的全景图,他不仅可以保留vr全景技术的所有特点,而且 ...

最新文章

  1. apache与tomcat的联系
  2. Android简单实现BroadCastReceiver广播机制
  3. Kube Controller Manager 源码分析
  4. java samphore 连接池_ADOConnection数据库连接池
  5. python特性 property_python特性property
  6. RxJava学习总结
  7. 中控H10考勤机管理员密码破解
  8. 转-Tensorflow之GPU和CPU
  9. 流媒体服务器原理和架构解析
  10. mac笔记本怎么外接显示屏_Mac电脑外接显示器全攻略
  11. 微信朋友圈限时推广微视,腾讯对短视频志在必得?
  12. Liunx中mysql服务
  13. 【浏览器】解决火狐和Chrome上不了网,只有IE能上网的问题
  14. Windows离线安装Rust
  15. 32/64位系统支持多大内存
  16. 几种论文排版工具(texlive, amot, texmaker)——新手的摸索过程
  17. c35是什么意思_混凝土c25、c30、c35分别代表什么意思?
  18. 关于前端框架vue/react及UI框架的配合
  19. 2023北方工业大学计算机考研信息汇总
  20. 35场面试,应届计算机毕业生的霸气求职之路

热门文章

  1. python租房_如何用Python爬租房网站信息
  2. 费曼学习法为什么会如此有魅力
  3. mac创建文件服务器,mac命令行终端怎么创建文件 mac命令行终端创建文
  4. 华为云服务-申请基础云服务
  5. Wi-Fi DFS与TPC介绍
  6. 股票MACD指标算法公式
  7. 在线医疗 java_hospital 基于反射的 在线医疗项目(二)
  8. 项目人生:成长与感悟
  9. unity实战 手机屏幕适配
  10. BRISQUE UCIQE UIQM