<pre name="code" class="java">最近公司要求做室内的360全景开发,在网上搜了些资料,基本上都是给的官网链接,自己研究了下,其实把这个做好真挺难搞,下面主要根据官网的PanoramaGL来作介绍:1,下载一个PanoramaGL的jar包,http://code.google.com/p/panoramagl-android/downloads/detail?name=PanoramaGL_0.2-beta.jar,然后导入到项目中。2,继承PLView,获取<span style="font-family: Arial, Helvetica, sans-serif;">当前根内容视图,将其添加到360视图中,然后在加载全景图像</span>public class MainActivity extends PLView {/* 下拉控件 */private Spinner mPanoramaTypeSpinner;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setListener(new PLViewListener() {@Overridepublic void onDidClickHotspot(PLIView view, PLIHotspot hotspot,CGPoint screenPoint, PLPosition scene3DPoint) {Toast.makeText(view.getActivity().getApplicationContext(),String.format("You select the hotspot with ID %d",hotspot.getIdentifier()), Toast.LENGTH_SHORT).show();}});}/*** @param contentView表示当前根内容视图* @return activity的根内容视图*/@Overrideprotected View onContentViewCreated(View contentView) {// 加载布局ViewGroup mainView = (ViewGroup) this.getLayoutInflater().inflate(R.layout.activity_main, null);// 添加360视图mainView.addView(contentView, 0);// 下拉列表控制mPanoramaTypeSpinner = (Spinner) mainView.findViewById(R.id.spinner_panorama_type);ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(this,R.array.panorama_types, android.R.layout.simple_spinner_item);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);mPanoramaTypeSpinner.setAdapter(adapter);mPanoramaTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parentView,View selectedItemView, int position, long id) {loadPanoramaFromJSON(position);}@Overridepublic void onNothingSelected(AdapterView<?> parentView) {}});return super.onContentViewCreated(mainView);}/*** 加载全景图像* * @param index表示的位置*            0 = 立方体, 1 =球体 , 2 = 球体, 3 = 圆柱体*/@SuppressWarnings("unused")private void loadPanorama(int index) {try {Context context = this.getApplicationContext();PLIPanorama panorama = null;// 锁定全景视图this.setLocked(true);// 全景全景视图switch (index) {// 立方体全景 (supports up 1024x1024 image per face)case 0:PLCubicPanorama cubicPanorama = new PLCubicPanorama();cubicPanorama.setImage(new PLImage(PLUtils.getBitmap(context,R.raw.panorama_f1), false),PLCubeFaceOrientation.PLCubeFaceOrientationFront);cubicPanorama.setImage(new PLImage(PLUtils.getBitmap(context,R.raw.panorama_b1), false),PLCubeFaceOrientation.PLCubeFaceOrientationBack);cubicPanorama.setImage(new PLImage(PLUtils.getBitmap(context,R.raw.panorama_l1), false),PLCubeFaceOrientation.PLCubeFaceOrientationLeft);cubicPanorama.setImage(new PLImage(PLUtils.getBitmap(context,R.raw.panorama_r1), false),PLCubeFaceOrientation.PLCubeFaceOrientationRight);cubicPanorama.setImage(new PLImage(PLUtils.getBitmap(context,R.raw.panorama_u1), false),PLCubeFaceOrientation.PLCubeFaceOrientationUp);cubicPanorama.setImage(new PLImage(PLUtils.getBitmap(context,R.raw.panorama_d1), false),PLCubeFaceOrientation.PLCubeFaceOrientationDown);panorama = cubicPanorama;break;// 球形全景 panorama (supports up 2048x1024 image)case 1:panorama = new PLSpherical2Panorama();((PLSpherical2Panorama) panorama).setImage(new PLImage(PLUtils.getBitmap(context, R.raw.panorama2), false));break;// 球形全景 (supports up 1024x512 image)case 2:panorama = new PLSphericalPanorama();((PLSphericalPanorama) panorama).setImage(new PLImage(PLUtils.getBitmap(context, R.raw.panorama), false));break;// 圆柱形全景 (supports up 1024x1024 image)case 3:PLCylindricalPanorama cylindricalPanorama = new PLCylindricalPanorama();cylindricalPanorama.setHeight(3.0f);cylindricalPanorama.getCamera().setPitchRange(0.0f, 0.0f);cylindricalPanorama.setImage(new PLImage(PLUtils.getBitmap(context, R.raw.panorama), false));panorama = cylindricalPanorama;break;default:break;}if (panorama != null) {// 设置摄像机的旋转角度panorama.getCamera().lookAt(0.0f, 170.0f);// 添加一个热点panorama.addHotspot(new PLHotspot(1, new PLImage(PLUtils.getBitmap(context, R.raw.hotspot), false), 0.0f,170.0f, 0.05f, 0.05f));// 重置视图this.reset();// 加载全景图this.startTransition(new PLTransitionBlend(2.0f), panorama); // 或者// this.setPanorama(panorama);}// 开启全景视图this.setLocked(false);} catch (Throwable e) {Toast.makeText(this.getApplicationContext(), "Error: " + e,Toast.LENGTH_SHORT).show();}}/*** 负载全景图像使用JSON协议* * @param index表示的位置*            0 = 立方体, 1 =球柱 , 2 = 球体, 3 = 圆柱体*/private void loadPanoramaFromJSON(int index) {try {PLILoader loader = null;switch (index) {case 0:loader = new PLJSONLoader("res://raw/json_cubic");break;case 1:loader = new PLJSONLoader("res://raw/json_spherical2");break;case 2:loader = new PLJSONLoader("res://raw/json_spherical");break;case 3:loader = new PLJSONLoader("res://raw/json_cylindrical");break;default:break;}if (loader != null)this.load(loader, true, new PLTransitionBlend(2.0f));} catch (Throwable e) {Toast.makeText(this.getApplicationContext(), "Error: " + e,Toast.LENGTH_SHORT).show();}}其实加载主要用得的还是json协议,Android客户端只是负责加载360全景图像,具体的大家可以下一个例子来看下,具体的可以留言问我,当然我可能也有许多不懂的地方,我也是在研究,大家互相学习进步。

Android 360全景开发(PanoramaGL)相关推荐

  1. 360全景开发(一)

    自己车上装了个360全景,但不知是安装调试的问题,还是APP开发的问题,拼出来的360全景部分地方有畸变,拼接缝隙明显,额外功能(例如ADAS)没有,果然便宜没好货...恰好最近在学图像处理,所以看不 ...

  2. 360全景开发(二) 鱼眼摄像头校正

    鱼眼摄像头校正有很多方法,这里取棋盘法,因为opencv自带这个方法.棋盘法是将一块类似国际象棋的黑白棋盘放到摄像头的前面,然后调用opencv获取棋盘上的角点,算出图像的相关转换矩阵,这样以后这个摄 ...

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

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

  4. android 360状态栏显示,如何从Android应用程序显示360全景(How to display a 360 panorama from android application)...

    如何从Android应用程序显示360全景(How to display a 360 panorama from android application) 我想从我的Android应用程序中显示一个全 ...

  5. android显示全景图片素材,【行业应用】360°全景-如何制作一个360度全景图

    第一步:拍摄全景图原始素材 由专业的摄影师使用专业相机.鱼眼镜头以及三脚架拍摄汽车.房间或者其他需要360全景展示的对象照片 我们来看下备用的三张原始素材 第二步:使用"PTGui Pro& ...

  6. Android音视频开发进阶

    原文链接:http://www.jianshu.com/u/a32db45d4859 Android视频开发进阶(part1-关于视频的那些术语) http://www.jianshu.com/p/1 ...

  7. Insta360:从软到硬,一年做出360°全景相机,中间填了多少坑?

    摘要刘靖康在大学就开始创业.在大二的时候他曾经去腾讯实习,然后又去了"超级课程表"这个团队实习半年,2013 年 9 月回到南京创业,一开始的产品叫"名校直播" ...

  8. android之相机开发

     http://blog.csdn.net/jason0539/article/details/10125017 android之相机开发 分类: android 基础知识2013-08-20 22: ...

  9. android 360加固保

    android 360加固 360加固保是什么 转自:http://www.veryhuo.com/a/view/92865.html 360加固保是为移动应用安全提供专业保护的平台,盗版App通常是 ...

最新文章

  1. JAVA GUI关闭按钮不起作用(用SwingWorker解决)
  2. 记录QT片断1-(痛苦的win32)
  3. Java获取泛型T的类型 T.class
  4. 管理运筹学软件计算机解咋看,运筹学软件结果解析总结计划题1-20210618123710.docx-原创力文档...
  5. 高通CEO透露他们已同23家全球性汽车品牌有合作
  6. 让英文版的LINUX 支持中文显示
  7. code第一部分数组:第十七题 爬楼梯问题
  8. [若有所悟]IT小兵总结IT人特点及挽留IT人才的九大策略
  9. 高中计算机学业水平考试三叶草,山东省信息技术学业水平考试软件
  10. java学生成绩管理系统类图,学生成绩管理系统的用例类图.ppt
  11. php微信开发之微信卡券
  12. VTK系列教程九:VR图像裁剪
  13. 操作手册与用户手册的区别
  14. 10个免费的游戏开发引擎
  15. 上帝在逃亡,撒旦在流浪
  16. Linux 时间一致性环境NTP/Chrony服务器部署配置
  17. 怎样操作微信可节省大量内存空间
  18. 运行JS脚本的几种方式
  19. “五四”青年节,我们采访了十位驭势青年
  20. 蚂蚁监控平台 - antmonitor架构设计

热门文章

  1. 每天读论语《论语·学而》02
  2. c语言从键盘输入5阶方阵,输入5×5阶的矩阵,编程实现: (1)求两条对角线上的各元素之和....
  3. 【推文】人间清醒VS梅花痣俏郎君
  4. 云服务器怎么设置成代理服务器?
  5. [Plant Simulation]使用TableFile和Method进行仓库仿真(Byref函数)
  6. Linux 编辑器 !强推!
  7. 年过完了,收心吧!送给大家送一波前端新书!
  8. 凡事预则立不预则废,你有自己的应急基金吗?教你如何理财
  9. linux sh文件执行情况,Linux下SH执行
  10. 《整洁代码之道》学习书摘(二)第一章——整洁代码