一.在build.gradle中引入谷歌VR的SDK依赖

compile 'com.google.vr:sdk-videowidget:1.10.0'

二.注意支持的最小SDK

minSdkVersion 19targetSdkVersion 25

三.界面布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="cn.bluemobi.dylan.vrdevelopvideo.MainActivity"><TextView
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Android开发VR360度全景视频" /><com.google.vr.sdk.widgets.video.VrVideoView
        android:id="@+id/vr_video_view"android:layout_width="match_parent"android:layout_height="250dp"></com.google.vr.sdk.widgets.video.VrVideoView><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageButton
            android:id="@+id/play_toggle"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:background="@android:color/transparent"android:paddingStart="0dp"android:src="@drawable/pause" /><SeekBar
            android:id="@+id/seek_bar"style="?android:attr/progressBarStyleHorizontal"android:layout_width="0dp"android:layout_height="32dp"android:layout_weight="8" /><ImageButton
            android:id="@+id/volume_toggle"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:background="@android:color/transparent"android:paddingStart="0dp"android:paddingTop="4dp"android:src="@drawable/volume_on" /></LinearLayout>
</LinearLayout>

四.加载360°全景视频

  /*** 加载360度全景视频*/private void load360Video() {vr_video_view = (VrVideoView) findViewById(R.id.vr_video_view);seek_bar = (SeekBar) findViewById(R.id.seek_bar);volume_toggle = (ImageButton) findViewById(R.id.volume_toggle);play_toggle = (ImageButton) findViewById(R.id.play_toggle);/**设置加载设置**/VrVideoView.Options options = new VrVideoView.Options();options.inputType = VrVideoView.Options.TYPE_STEREO_OVER_UNDER;/*** 设置加载监听*/vr_video_view.setEventListener(new VrVideoEventListener() {/*** 视频播放完成回调*/@Overridepublic void onCompletion() {super.onCompletion();/**播放完成后跳转到开始重新播放**/vr_video_view.seekTo(0);setIsPlay(false);Log.d(TAG, "onCompletion()");}/*** 加载每一帧视频的回调*/@Overridepublic void onNewFrame() {super.onNewFrame();seek_bar.setProgress((int) vr_video_view.getCurrentPosition());Log.d(TAG, "onNewFrame()");}/*** 点击VR视频回调*/@Overridepublic void onClick() {super.onClick();Log.d(TAG, "onClick()");}/*** 加载VR视频失败回调* @param errorMessage*/@Overridepublic void onLoadError(String errorMessage) {super.onLoadError(errorMessage);Log.d(TAG, "onLoadError()->errorMessage=" + errorMessage);}/*** 加载VR视频成功回调*/@Overridepublic void onLoadSuccess() {super.onLoadSuccess();/**加载成功后设置回调**/seek_bar.setMax((int) vr_video_view.getDuration());Log.d(TAG, "onNewFrame()");}/*** 显示模式改变回调* 1.默认* 2.全屏模式* 3.VR观看模式,即横屏分屏模式* @param newDisplayMode 模式*/@Overridepublic void onDisplayModeChanged(int newDisplayMode) {super.onDisplayModeChanged(newDisplayMode);Log.d(TAG, "onLoadError()->newDisplayMode=" + newDisplayMode);}});try {/**加载VR视频**/vr_video_view.loadVideoFromAsset("congo.mp4", options);} catch (IOException e) {e.printStackTrace();}/**设置声音按钮点击监听**/volume_toggle.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {setIsMuted(!isMuted);}});/**设置播放暂停按钮点击监听**/play_toggle.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {setIsPlay(!isPlay);}});/**设置进度条拖动监听**/seek_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {/*** 进度条拖动改变监听* @param seekBar 拖动条* @param progress 进度* @param fromUser 是否是用户手动操作的*/@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {if (fromUser) {/**调节视频进度**/vr_video_view.seekTo(progress);}}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});}/*** 设置声音开关** @param isMuted 开关*/private void setIsMuted(boolean isMuted) {this.isMuted = isMuted;volume_toggle.setImageResource(isMuted ? R.drawable.volume_off : R.drawable.volume_on);vr_video_view.setVolume(isMuted ? 0.0f : 1.0f);}/*** 设置播放暂停** @param isPlay 播放暂停*/private void setIsPlay(boolean isPlay) {this.isPlay = isPlay;play_toggle.setImageResource(isPlay ?R.drawable.pause:  R.drawable.play );if(isPlay){vr_video_view.playVideo();}else{vr_video_view.pauseVideo();}}

这样,VR视频360°全景播放视频功能实现完成

效果图:

五、源码

http://download.csdn.net/detail/liu_jing_hui/9877996

Android开发实战使用(VR技术实现360°全景视频播放功能)相关推荐

  1. 【Android开发VR实战】二.播放360°全景视频

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53924006 本文出自[DylanAndroid的博客] [Android开发 ...

  2. android垃圾清理动画,[Android开发实战]金山清理大师(猎豹清理大师)一键加速快捷方式动画实现...

    转载请注明出处:http://blog.csdn.net/ruils/article/details/16922557 最近有人问我金山清理大师桌面上的一键加速的动画是如何实现的,我下了个金山清理大师 ...

  3. Xamarin Android开发实战(上册)

    Xamarin Android开发实战(上册)大学霸内部资料 试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm 介绍: 本教程是国内唯一的Xamarin ...

  4. 《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.5节良好的Java程序代码编写风格,作者 陈会安,更多章节内容可以访问云栖社区"异步社区&quo ...

  5. 《Java和Android开发实战详解》——1.2节Java基础知识

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  6. 《Java和Android开发实战详解》——2.2节构建Java应用程序

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.2节构建Java应用程序,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  7. [魔乐科技]Android开发实战经典视频教程

    http://down.51cto.com/zt/2757/6/ Android开发实战经典视频教程 http://down.51cto.com/data/407121 03_传智播客Android视 ...

  8. Android开发实战---一个汽车销售APP,有汽车列表页、汽车详情页、贷款计算页3个界面。

    Android开发实战设计并实现一个汽车销售APP,要求至少有汽车列表页.汽车详情页.贷款计算页3个界面. 已开源:https://github.com/yan123666/wlf 实现结果: 1.计 ...

  9. 阅读《名师讲坛--Android开发实战经典》

    一,专心,快速阅读一本书,直到深入理解,把书读厚,再读薄,你定会有收获. 二,20171214开始阅读<名师讲坛--Android开发实战经典>,但愿自己有所收获.从今天开始养成刻录学习写 ...

  10. there.js移动端 IOS 安卓 360全景视频(vr)

    360全景视频3D播放源码使用mxreality.js技术 <!DOCTYPE html> <html lang="en"><head>< ...

最新文章

  1. POCO:InvalidOperationError:Mapping and metadata information could not be found for Entity Type
  2. Android - Android Studio 解决访问被墙的问题
  3. golang 写入文件 覆盖旧文件 将旧文件清空
  4. python扫描内网banner信息
  5. KubeSphere 3.1.0 GA:混合多云走向边缘,让应用无处不在
  6. 7-10 找最小的字符串 (15 分)
  7. Python精通-Python局部变量与全局变量的区别
  8. 关于C#的数据绑定,存取数据库实例详解 (三)
  9. pycharm运行pytest参数化运行teardown错误
  10. 基于python tkinter 实现的类似于everthing的文件检索工具
  11. 计算机密码的怎么查询,电脑密码如何查看? 手把手教你查看方法
  12. 自动驾驶基础——惯性测量单元(IMU)
  13. java和c制作游戏软件,游戏软件制作,游戏软件制作入门教程
  14. idea 找出TODO
  15. rhel系统启动过程_技术|Linux 开机引导和启动过程详解
  16. 从头开始构建一台8位计算机 - 完整的零件清单
  17. 关于java变量命名,介绍阿里JAVA命名规范及IDEA实时检测插件的使用以及CODELF取名神器
  18. 一文看懂人工智能语音芯片
  19. butter中文意思_butter中文是什么意思
  20. 为什么更多企业会选择零代码开发平台?它的魅力在哪?

热门文章

  1. 如何查看手机的android版本信息,怎么查看手机型号、配置、版本【图文教程】...
  2. fiddler4安装教程以及手机下载证书时报错 no root certificate was found解决方法
  3. C语言判断逆反素数,判断素数的几种方法思考[C语言]
  4. NYOJ 取石子总结
  5. 用python数据分析来解密新经济(IT桔子)死亡公司的内幕
  6. python 手机号码识别_python3库可以识别电话号码、姓名、电子邮件和地址
  7. 软件项目管理案例教程第4版课后习题第二章
  8. java编程入门到精通课后答案,附源代码
  9. VC6.0 files---open 出现 MSDEV.exe错误,Project ---- add to project 出现错误等等~~
  10. RAIM: A Reverse Auction-based Incentive Mechanism for Mobile Data Offloading through Opportunistic