一.配置环境

1.添加模板依赖

common,commonwidget(显示图片和视频都有的库)
panowidget专门显示VR图片的依赖库
videwidget专门显示VR视频的依赖库

2.再打开模版的build.gradle添加如下两句话

compile'com.google.android.exoplayer:exoplayer:r1.5.10'
compile'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'

3.配置ndk用到的c,c++库

把ndk文件夹直接复制到项目中即可

4.配置清单文件,添加如下权限:

<!-- These permissions are used by Google VR SDK to get the best Google VR headset profiles. ! -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

二.java代码操作

展示VR图片

布局文件

  • 使用VrPanoramaView显示图片

    <!--显示VR图片-->
    <com.google.vr.sdk.widgets.pano.VrPanoramaViewandroid:id="@+id/pano_view"android:layout_width="match_parent"android:layout_height="250dp"android:layout_margin="5dp"android:scrollbars="@null" />
    

代码

  • 查找xml中的控件

    vrPanoramaView = (VrPanoramaView) findViewById(R.id.pano_view);
    

  • 装载图片

    使用loadImageFromBitmap(),该方法建议在UI主线程中调用

    • 本地图片

      /*** 本地VR图片展示,图片资源放在assets目录下*/
      VrPanoramaView.Options options = new VrPanoramaView.Options();
      options.inputType = VrPanoramaView.Options.TYPE_STEREO_OVER_UNDER;
      try {vrPanoramaView.loadImageFromBitmap(BitmapFactory.decodeStream(getAssets().open("panoramas/andes.jpg")), options);
      } catch (IOException e) {e.printStackTrace();
      }
      
    • 网络图片

      /*** 网络VR图片展示*/
      if (backgroundImageLoaderTask!=null){//取消上一个异步任务backgroundImageLoaderTask.cancel(true);
      }
      backgroundImageLoaderTask = new ImageLoaderTask();
      backgroundImageLoaderTask.execute(imgPath);
      

      网络图片下载异步任务

      class ImageLoaderTask extends AsyncTask<String, Void, Bitmap> {@Overrideprotected Bitmap doInBackground(String... params) {Bitmap bmp = null;try {URL url = new URL(params[0]);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(5000);if (200 == connection.getResponseCode()) {InputStream is = connection.getInputStream();bmp = BitmapFactory.decodeStream(is);}} catch (Exception e) {}return bmp;}@Overrideprotected void onPostExecute(Bitmap bitmap) {super.onPostExecute(bitmap);VrPanoramaView.Options panoOptions = null;panoOptions = new VrPanoramaView.Options();panoOptions.inputType = VrPanoramaView.Options.TYPE_STEREO_OVER_UNDER;vrPanoramaView.loadImageFromBitmap(bitmap, panoOptions);}
      }
      

  • 设置事件监听:setEventListener

    vrPanoramaView.setEventListener(new VrPanoramaEventListener() {//重写四个方法
    }
    

    1.图片资源装载成功

    @Override
    public void onLoadSuccess() {super.onLoadSuccess();Toast.makeText(VRImgActivity.this, "装载成功", Toast.LENGTH_SHORT).show();
    }
    

    2.图片资源装载失败,错误原因如errorMessage

    @Override
    public void onLoadError(String errorMessage) {super.onLoadError(errorMessage);Toast.makeText(VRImgActivity.this, "装载失败,原因是:" + errorMessage, Toast.LENGTH_SHORT).show();
    }
    

    3.VR图片点击执行的方法

    @Override
    public void onClick() {super.onClick();Toast.makeText(VRImgActivity.this, "点击VR图片", Toast.LENGTH_SHORT).show();
    }
    

    4.改变显示模式(全屏模式和纸板模式)

    @Override
    public void onDisplayModeChanged(int newDisplayMode) {super.onDisplayModeChanged(newDisplayMode);Toast.makeText(VRImgActivity.this, "onDisplayModeChanged", Toast.LENGTH_SHORT).show();
    }
    

展示VR视频

布局文件

  • 使用VrVideoView显示视频

    <com.google.vr.sdk.widgets.video.VrVideoView
    android:id="@+id/video_view"
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:scrollbars="@null" /><SeekBar
    android:id="@+id/seekBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/video_view"
    android:layout_marginBottom="10dp"
    android:layout_marginRight="20dp" />
    

代码

  • 查找xml中的控件

    videoWidgetView = (VrVideoView) findViewById(R.id.video_view);
    seekBar = (SeekBar) findViewById(R.id.seekBar);
    

  • 装载视频

    本地(loadVideoFromAsset)和网络(loadVideo)

    VrVideoView.Options options = new VrVideoView.Options();
    options.inputType = VrVideoView.Options.TYPE_STEREO_OVER_UNDER;
    try {//本地视频
    //  videoWidgetView.loadVideoFromAsset("videos/congo.mp4", options);//网络视频videoWidgetView.loadVideo(Uri.parse(videoPath), options);
    } catch (IOException e) {e.printStackTrace();
    }
    

  • 使用Seekbar进度条控制视频进度

    设置其监听重写方法

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {if (fromUser) {videoWidgetView.seekTo(progress);}
    }
    

  • 设置事件监听:setEventListener

    vrPanoramaView.setEventListener(new VrPanoramaEventListener() {//重写五个方法
    }
    

    1.视频资源装载成功,设置seekBar

    @Override
    public void onLoadSuccess() {super.onLoadSuccess();seekBar.setMax((int) videoWidgetView.getDuration());
    }
    

    2.图片资源装载失败,错误原因如errorMessage

    @Override
    public void onLoadError(String errorMessage) {super.onLoadError(errorMessage);Toast.makeText(VRVideoActivity.this, "装载失败,原因是:" + errorMessage, Toast.LENGTH_SHORT).show();
    }
    

    3.VR视频点击执行的方法

    @Override
    public void onClick() {super.onClick();togglePause();
    }
    
    • togglePause(),具体如下:暂停就播放,播放可暂停

      private void togglePause() {if (isPaused) {videoWidgetView.playVideo();} else {videoWidgetView.pauseVideo();}isPaused = !isPaused;
      }
      

    4.更新SeeKBar的进度条

    @Override
    public void onNewFrame() {super.onNewFrame();seekBar.setProgress((int) videoWidgetView.getCurrentPosition());
    }
    

    5.视频完成播放再次循环播放

    @Override
    public void onCompletion() {videoWidgetView.seekTo(0);
    }
    

  • 视频伴随生命周期的操作

    防止渲染

    @Override
    protected void onPause() {super.onPause();videoWidgetView.pauseRendering();isPaused = true;
    }
    

    恢复渲染

    @Override
    protected void onResume() {super.onResume();videoWidgetView.resumeRendering();
    }
    

    销毁

    @Override
    protected void onDestroy() {//一定要在onDestroy()时调用,用来释放占用内存videoWidgetView.shutdown();super.onDestroy();
    }
    

到这里结束了,此文主要是简单集成VR,欢迎大家学习补充.

代码资源下载

Android VR 简单开发相关推荐

  1. android蓝牙简单开发

    概述 前段时间学习了一些蓝牙开发的知识,记录一下Android中蓝牙的简单开发.下面是最重要的两个类. BluetoothAdapter : 蓝牙适配器,通过getDefaultAdapter ()去 ...

  2. 模拟滑动android无障碍,Android无障碍简单开发-模拟滑动点击输入等

    似乎除了input type=password的edit text 其他所有的UI都可以进行操作.直接开始. 首先配置环境. 创建一个service 清单中代码如下,就算用AS直接创建,也需要配置一些 ...

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

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

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

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

  5. android+Unity3D游戏开发之简单的物体运动

    android+Unity3D游戏开发之简单的物体运动 其实这篇也是转载的,真的感觉对于我们初学者来说很不错的,不信你看看嘛;原创链接:http://bbs.9ria.com/thread-98192 ...

  6. Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法)

    Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法) Android studio五年经验教你如何:花费了2周快速开发卡牌杀系类游戏,核心思路分享 ...

  7. 简单开发的android阅读器源码,包含了读取数据库和文件流处理功能

    原文:简单开发的android阅读器源码,包含了读取数据库和文件流处理功能 源代码下载地址:http://www.zuidaima.com/share/1838906559466496.htm 简单地 ...

  8. Android VR入门文章

    android官方给出了两种VR实现方式CardBoard和DayDream. 这两种有什么区别呢? 白日梦是高质量,移动虚拟现实的平台.在主页上方官方也描述它为:低延迟,身临其境的,互动的移动VR的 ...

  9. 揭秘VR游戏开发:与传统3D差距仅10% 低延迟是核心

    背景介绍 北京时间3月16日,索尼在GDC 2016上公布了其虚拟现实头盔--PS VR消费者版的售价:399美元(约合人民币2600元).同时,著名电子游戏<孤岛危机>开发商Crytek ...

最新文章

  1. 【论文阅读记录】Real-Time Correlative Scan Matching
  2. SQLite使用手记
  3. net空间一次购买终身使用_官方解答关于 Internet Download Manager IDM 终身许可证和1年许可证的相关说明!...
  4. arcengine 错误
  5. 按照月的第几周统计_Excel财务案例分享(3)——使用函数制作销售月报和周报...
  6. 未来10年,最具颠覆性的5大指数型技术(附应用建议)
  7. vs2013 win10 Caffe的编译安装(微软版本)
  8. 云迁移实践:VMware虚拟机迁移到腾讯云
  9. 2022 我勇敢地走过
  10. org.apache.flink.util.FlinkRuntimeException: Exceeded checkpoint tolerable failure threshold
  11. 20201010基础标签用途说明
  12. Ubuntu18.04系统硬盘分区方法
  13. What is modularity And how to achieve modularity
  14. 细粒度识别 | 百度细粒度识别方案
  15. 【年度总结】回望大学四年坎坷的2022
  16. SAP 教程之 06 EDI 与 IDOC 的对比
  17. 小米8原生android10,小米8SE 魔趣OS 安卓10 MagiskV21版 完美ROOT 纯净完美 原生极简 纯净推荐...
  18. Decentralized Federated Learning: A Segmented Gossip Approach
  19. VVC/H.266 项目文件的生成及有用网址
  20. 中国截止阀市场现状研究分析与发展前景预测报告(2022)

热门文章

  1. HTC vive、Vive Focus、Vive FocusPlus应用场景轻度对比
  2. 结构体数组作为函数参数
  3. CNKI E-Study系统崩溃问题:
  4. 基于Kubernetes支撑的项目,环境规划,构建优化,监控报警怎么做才好?
  5. Redis 和 Lua设计红包
  6. PTA L1-020 帅到没朋友 C++实现
  7. 气泡文字php,CSS3 巧妙实现聊天气泡
  8. 荒野行动8月1日服务器维护,荒野行动pc版12月21日更新了怎么进不去游戏 服务器维护到几点才开...
  9. 想转行到IT,心里不定,不知道怎么做?
  10. Java版人脸跟踪三部曲之三:编码实战