Android三种姿势带你玩转360度全景图功能

大家好我是张鹏辉(道长)人如其名,我是天桥上算命的,转发这条博文,接下来一个月会有意想不到的惊喜发生。最近微博上的全景图火了,所以决定实现一下。工程里面图片资源来自网络,如有侵权请联系我,马上删除当然实现的方式很多比如OpenCV、u3d等。这里提供三种方式实现:

先看下三种实现的效果:

1.OpenGLES

第一种方式使用OpenGL来实现(上面gif图截取因为博客限制上传图片的大小,我压缩了,看起来有些卡其实很流畅的)可以看到支持旋转手机查看、或者拖动图片查看、可以看到右边中心部分有个指示器会随着角度变化而变化并且点击可以还原起始位置。

有些小伙伴懒得看原理,直接就想拿来用所以我先说集成方式吧!

在build.gradle文件中添加库依赖:

dependencies{compile'com.github.CN-ZPH:weibo360panorama:v1.0.1'}build.gradle完整代码:

publicclassMainActivityextendsAppCompatActivity{privateGLPanoramamGLPanorama;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化全景控件mGLPanorama=(GLPanorama)findViewById(R.id.mGLPanorama);//传入你的全景图mGLPanorama.setGLPanorama(R.drawable.imggugong);}}OK现在你可以测试玩玩了(别用模拟器玩咔咔报错就来找我)。二.分析首先我们需要了解全景图是什么东西,全景图是一种广角图。通过全景播放器可以让观看者身临其境地进入到全景图所记录的场景中去,通常标准的全景图是一张2:1的图像,其背后的实质就是等距圆柱投影。等距圆柱投影是一种将球体上的各个点投影到圆柱体的侧面上的一种投影方式,投影完之后再将它展开就是一张2:1的长方形的图像。比较常见的就是应用在地图上的投影。

得到全景图后那我们就需要展示了,看到旁边地球了吗?

怎么展示呢简单来说就是把全景图片整个贴到一个球体上。好了知道原理那我们就该考虑在android上怎么实现了,在android中绘制3d图形可以使用OpenGL(就不说OpenGL基础了想看的自己百度一大堆资料)。

纹理和图片绑定绘制到屏幕上

int[]textures=newint[1];glGenTextures(1,textures,0);inttextureId=textures[0];glBindTexture(GL_TEXTURE_2D,textureId);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);InputStreamis=context.getResources().openRawResource(drawableId);BitmapbitmapTmp;try{bitmapTmp=BitmapFactory.decodeStream(is);}finally{try{is.close();}catch(IOExceptione){e.printStackTrace();}}GLUtils.texImage2D(GL_TEXTURE_2D,0,bitmapTmp,0);bitmapTmp.recycle();2.利用传感器让球随着手机转动而转动第一想到的就是重力感应传感器,可是只能获得我们向那个位置偏移的方向,显然不可能满足我们旋转的需求,使用陀螺仪传感器。陀螺仪就是内部有一个陀螺,它的轴由于陀螺效应始终与初始方向平行,这样就可以通过与初始方向的偏差计算出实际方向。陀螺仪对设备旋转角度的检测是瞬时的而且是非常精确的。

首先注册陀螺仪传感器根据具体需要自己设置灵敏度,当然越灵敏,越耗电。

我这里为了测试设置了SENSOR_DELAY_FASTEST,实际使用建议用SENSOR_DELAY_GAME

privatevoidinitSensor(){sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);gyroscopeSensor=sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);sensorManager.registerListener(this,gyroscopeSensor,SensorManager.SENSOR_DELAY_FASTEST);}2.获得传感器数据当传感器的值发生变化时,例如磁阻传感器方向改变时会调用OnSensorChanged().当传感器的精度发生变化时会调用OnAccuracyChanged()方法。

@OverridepublicvoidonSensorChanged(SensorEventsensorEvent){if(sensorEvent.sensor.getType()==Sensor.TYPE_GYROSCOPE){if(timestamp!=0){finalfloatdT=(sensorEvent.timestamp-timestamp)*NS2S;angle[0]+=sensorEvent.values[0]*dT;angle[1]+=sensorEvent.values[1]*dT;angle[2]+=sensorEvent.values[2]*dT;floatanglex=(float)Math.toDegrees(angle[0]);floatangley=(float)Math.toDegrees(angle[1]);floatanglez=(float)Math.toDegrees(angle[2]);Sensordtinfo=newSensordt();info.setSensorX(angley);info.setSensorY(anglex);info.setSensorZ(anglez);Messagemsg=newMessage();msg.what=101;msg.obj=info;mHandler.sendMessage(msg);}timestamp=sensorEvent.timestamp;}}3.设置填充球的Y,X的角度每次获得角度数据后只需要y,x的值计算位移的值

因为全景图上下旋转会翻转整个图所以我这里设置了上下只能偏移50f,如果不限制你可以去掉

mBall.yAngle+=dx*2.0f;这里*2.0也就是陀螺仪传过来的值乘以得出偏移的角度,数值越大,每次偏移更快!

Sensordtinfo=(Sensordt)msg.obj;floaty=info.getSensorY();floatx=info.getSensorX();floatdy=y-mPreviousY;//计算触控笔Y位移floatdx=x-mPreviousX;//计算触控笔X位移mBall.yAngle+=dx*2.0f;//设置填充椭圆绕y轴旋转的角度mBall.xAngle+=dy*0.5f;//设置填充椭圆绕x轴旋转的角度if(mBall.xAngle<-50f){mBall.xAngle=-50f;}elseif(mBall.xAngle>50f){mBall.xAngle=50f;}mPreviousY=y;mPreviousX=x;3.加入手势操控,拖动图片转动加入手势这里没什么好说的了,就是重写onTouchEvent()方法。这里唯一要注意的就是,当手指点击屏幕的时候要关闭陀螺仪传感器的监听不然会引起冲突。当手指离开屏幕,重新监听陀螺仪传感器。和上面也一样只是这里换成获取手指偏移角度,而不是传感器的数值,直接看代码。

publicbooleanonTouchEvent(MotionEvente){sensorManager.unregisterListener(this);floaty=e.getY();floatx=e.getX();switch(e.getAction()){caseMotionEvent.ACTION_MOVE:floatdy=y-mPreviousYs;//计算触控笔Y位移floatdx=x-mPreviousXs;//计算触控笔X位移mBall.yAngle+=dx*0.3f;//设置填充椭圆绕y轴旋转的角度mBall.xAngle+=dy*0.3f;//设置填充椭圆绕x轴旋转的角度if(mBall.xAngle<-50f){mBall.xAngle=-50f;}elseif(mBall.xAngle>50f){mBall.xAngle=50f;}Log.i("zphsas","mHandler***mPreviousY"+mBall.yAngle);Log.i("zphsas","mHandler***mPreviousx"+mBall.xAngle);rotate();break;caseMotionEvent.ACTION_UP:sensorManager.registerListener(this,gyroscopeSensor,SensorManager.SENSOR_DELAY_FASTEST);break;}mPreviousYs=y;//记录触控笔位置mPreviousXs=x;//记录触控笔位置returntrue;}4.加入指示器指示器这里弄了一个角标指示当前在全景图的角度,并且点击还原起始角度。可以想象同样是获取角度,我们直接放在全景图改变的地方,让指示器一起改变,而我们改变的地方只有2个陀螺仪和拖动屏幕。我这里指示器放了一张图也就是一个ImageView控件

1.为指示器加入动画跟随全景图一起转

privatevoidrotate(){RotateAnimationanim=newRotateAnimation(predegrees,-mBall.yAngle,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);anim.setDuration(200);img.startAnimation(anim);predegrees=-mBall.yAngle;//记录这一次的起始角度作为下次旋转的初始角度}2.点击指示器还原起始位置

当点击还原的时候,我一开始是直接恢复起始位置可是太生硬了,通过获取当前旋转的角度,逆向旋转,慢慢还原,让其有个过渡的效果。Y轴=旋转的角度-90f(起始角度)/10f(每次偏移多少,经过我多次尝试10f在我的手机上刚刚好);得到我们总共偏移几次可以复位;X轴同理,因为我上面限制了X轴的最大偏移,这里就不就算X轴了,不过在完成的同时直接复位X轴。(只是没有过渡的效果),你可以加上。我设置的起始角度是90f和0f,也就是X,Y轴的起始点mHandlers.postDelayed(this,16);这行代码就是多少毫秒复位一次。

看代码:

privatevoidzero(){yy=(int)((mBall.yAngle-90f)/10f);mHandlers.post(newRunnable(){@Overridepublicvoidrun(){if(yy!=0){if(yy>0){mBall.yAngle=mBall.yAngle-10f;mHandlers.postDelayed(this,16);yy--;}if(yy<0){mBall.yAngle=mBall.yAngle+10f;mHandlers.postDelayed(this,16);yy++;}}else{mBall.yAngle=90f;}mBall.xAngle=0f;}});}至此第一种OpenGLES方式核心代码分析完毕,有不明白的地方可以找我第二种GoogleVR第二种也就是谷歌官方为移动平台下VR解决方案,有兴趣的可以点开下面链接玩玩,我们只使用其中全景图模块。

目前GitHub上最新版本号为1.8.0,我这里也用最新的了。最低支持到minSdkVersion19也就是Android4.4.0在build.gradle文件中添加库依赖:

考虑到在多种机型兼容性,还有原生WebView的一些坑,我这里使用腾讯的X5内核的WebView。

到x5官网下载最新的sdk得到一个jar包我在这的是3.3.0版本的。将下载好的jar包放到你的工程libs目录下在build.gradle文件中添加库依赖:

你可以使用js交互将你的地址传到HTML上

直接上代码了:

publicclassWebViewActivityextendsAppCompatActivity{privatecom.tencent.smtt.sdk.WebViewtencent_webview;privateStringurl="file:///android_asset/admin.html";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_web_view);initView();}@SuppressLint("SetJavaScriptEnabled")privatevoidinitView(){tencent_webview=(WebView)findViewById(R.id.web);tencent_webview.loadUrl(url);WebSettingswebSettings=tencent_webview.getSettings();webSettings.setJavaScriptEnabled(true);tencent_webview.setWebViewClient(newWebViewClient(){@OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){returntrue;}});}}

THE END
1.全景故宫下载全景故宫最新版下载全景故宫app下载全景故宫下载栏目提供了最全的全景故宫版本内容,喜欢这款软件的用户,可以下载最新的官方版本,还能够找到相同类型的APP,保证每一位来到这里的玩家都能够找到感兴趣软件版本。 更新时间:2024-12-28 全景故宫版本大全 官方版 全景故宫相关软件 每日故宫 安卓版 小说漫画|69.29MB 星全景 安卓版 拍照摄影|26.83MB https://shouyou.3dmgame.com/zt/86210_game/
2.3D故宫3D故宫 分类:应用,旅游出行 类型:免费版 语言:简体中文 版本:3.0.1 大小:295.67MB 适用:Android、安卓 2 语音讲解北京故宫旅游相关信息;3D故宫是上海飞毯网络科技有限公司开发的3D景点系列APP之一,主要功能如下: 取消、收录、等问题,联糸方式。http://www.xiaabc.com/j/1/3Dgugong8490.html
3.3D故宫相似应用下载3D故宫是上海飞毯网络有限公司开发的3D景点系列APP之一。3D景点系列APP是上海飞毯网络科技有限公司推出的以实用性和工具化为导向,以3D虚拟游览、景观图文讲解、自助导游语音、人文历史信息和地图分类查询为核心服务的移动端应用。 3D故宫更新内容 主要功能描述:1.3D虚拟游览中国古代建筑杰作——世界五大宫之首的北京故宫;https://www.wandoujia.com/apps/com.feitan.gugong
4.故宫全景游iPhone版免费下载立即下载 详情 推荐 评论 【故宫全景游】 【基本介绍】全球首款中英双语故宫虚拟旅游App,采用3D高清全景技术,全方位展现故宫的精美建筑艺术和悠久历史文化。 45张高清实景,中英文语音讲解,手绘导游图,体感变换全周视角,令您尽情享受超炫的全景体验,身临其境漫游故宫。1.中英文语音讲解,详尽了解故宫历史2.支持离线https://m.duote.com/ios/608352.html
5.故宫app有哪些?故宫app推荐故宫app官方下载故宫app有哪些?故宫app推荐-故宫app官方下载故宫app的合集里面为你收集了各种能够更好地去了解故宫的软件,其中有像在线讲解的app,也有云游玩的app,搭配上vr设备,能够给你一种身临其境的感觉。掌上故宫是目前故宫相关的app里面比较受欢迎的一款,掌上故宫除了安卓、苹果、英文等多种版本,向全世界各地的用户展现故宫http://www.downcc.com/k/laquanquan/
6.故宫app下载故宫v3.3.6手机版软件介绍 故宫是一款提供旅游讲解的软件看,用户在平台里可以更好的了解故宫的具体情况,让你在旅游的时候能够得到更多的帮助,为你的旅游实时的导航,更好的进行使用。平台会智能的进行定位,根据用户的位置信息实时的进行讲解,所有的景区全部展示在平台里,用户在选择的时候更加的方便,让你可以快速的到达景区进行观看,更好https://www.xiazaiba.com/html/101303.html
7.故宫全景图3d模型故宫全景图模型图片素材免费下载3D溜溜网3d模型库,汇集多类型故宫全景图模型图片素材,帮设计师根据不同场景,寻找免费下载的三维立体,3dmax和C4D模型素材,找故宫全景图3d模型图片素材就来3D溜溜网。https://3d.3d66.com/relation/relation_2022103.html
8.故宫全景图片平面图下载知末网CAD图纸库为你精选故宫全景图片平面图素材,根据设计需求快速帮你找到适合的故宫全景图片平面图下载cad图纸图库就上知末网CAD图纸库https://sgt.znzmo.com/cadtag/367924.html
9.www.di2ke.com/mmmj/801480.shtml故宫大班美术教案 56.11MB 38好评 ?XX日本中国老人性生活乄X乄 又黄又肉到湿的爽文 欧美?把腿张开老子CAO烂你动态图 87.58MB 87%好评061人) 黄色网站下载APP 五个校花 沦为性奴 交换久久厕拍全景偷窥嘘嘘av 84.40MB 96%好评874人) 欧美热曰韩热 国产夫妻视频 老骚货免费性爱视http://www.di2ke.com/mmmj/801480.shtml
10.www.hnsdgs.com/airpods/2024121683767580.shtmlkg322 0M心 五月停停色综合 319.62MB 225好评 豪门乱欲 一级片毛少 骚穴女10p图 213.91MB 美女洗澡露出奶头疼 国语对白88 284.84MB 古井房地产 小舞淫荡被操3D 十一月奶茶店美女如厕全景侧拍 张开美腿露美穴 欧美高清ww色 小sb是不是欠c太久了xbxbhttp://www.hnsdgs.com/airpods/2024121683767580.shtml
11.全景故宫图片全景故宫图片素材免费下载千库网为设计者提供全景故宫素材大全,为您省却全景故宫图片素材搜索时间,这里有海量全景故宫素材图片供您下载使用,本次搜索千库网为您找到1509张素材https://m.588ku.com/image/quanjinggugong.html
12.故宫博物院展览,故宫3d可转全景图我以前,在故宫博物院工作过几十年不是所都是假的但,是真的也不多珍宝馆钟表馆等等绝大部分都是,https://edu.iask.sina.com.cn/jy/33SyAuL2hAB.html
13.高中信息技术学业水平考试选修(多媒体技术应用)复习题2.以下关于矢量图和点阵图描述不正确的是( B ) A.矢量图是指用一组指令集合来描述图形画面的内容。 B.矢量图的清晰度与分辨率有关。 C.点阵图是由11.某同学想制作一个自己家的全景视图,下列哪个软件能帮他实现( C ) A.Ulead Cool 3D B.P hotoshop C.Ulead Cool 360 D.画图 12.小明暑假时随父母https://m.360docs.net/doc/0111397847.html
14.全景图片图片免费下载全景图片素材全景图片模板千图网为您找到7488张全景图片相关素材,千图网还提供全景图片图片,全景图片素材, 全景图片模板等免费下载服务,千图网是国内专业创意营销服务交易平台,一站式解决企业营销数字化、协同化,实现营销转化效果增长!https://www.58pic.com/tupian/quanjingtupian.html
15.现实故宫全景模型3D嘲模型.zip3dmax故宫资源立即下载 开通VIP(低至0.43/天) 买1年送3月 【3Dmax与故宫全景模型】 3Dmax是一款由Autodesk公司开发的三维建模、动画和渲染软件,广泛应用于建筑可视化、电影特效、游戏设计等领域。本资源为"现实故宫全景模型3D场景模型.zip",其中包含了使用3Dmax创建的故宫全景3D模型,特别指出该模型是针对3Dmax 2016版本优化的,https://download.csdn.net/download/qq_40999248/33357653
16.北京故宫全景图片(13张)实用标准文案故宫印象全景图片(13张)介绍故宫,即指在封建王朝统治时期,前王朝皇帝所居住工作的宫殿建筑群,现多指位于北 京的故宫博物院。故宫始建于明永乐4年(1406年),1420年基本竣工,是明朝皇帝朱棣始建。故宫南北长 961米,东西宽753米,面积约为725,000平方米。建筑面积 15.5万平方 米。相传故宫一共有 9999.5间https://www.renrendoc.com/paper/179173629.html
17.故宫全景实物图素材免费下载觅元素为您提供故宫全景实物图素材免费下载,此作品编号为ceqnnpdxjm,图片大小为 0.66M,图片规格为 1024*675 | 72dpi,下载更多图片素材就来觅元素!https://www.51yuansu.com/sc/ceqnnpdxjm.html
18.酷雷曼VR全景官网酷雷曼依托自主研发的新一代3DVR全景营销系统软件,为商企提供专业720度VR全景拍摄、VR全景制作、VR全景展示、发布分享及VR技术支持等服务,用全景让品牌深入人心!https://www.kuleiman.com/
19.三维虚拟仿真技术11篇(全文)三维全景图课件的制作 1.制作工具 三维全景图的制作工具有:台湾Ulead公司的COOL360、上海杰图软件技术有限公司推出的一整套全景制作解决方案、Apple公司的全景视频产品专业解决方案QuickTime VR、IBM公司出品的Hot Media软件等。 2.三维全景图课件制作基本步骤 https://www.99xueshu.com/w/ikey0kaqoms7.html
20.全图图片大全全图高清图片下载室内客厅全景展示图客厅。沙发和米色的扶手椅。 3D渲染 地球的立体图片 蓝色世界地图各大洲大洋商务科技背景图片 中国传统古建筑旅行北京景点建筑故宫紫禁城红柱子房屋景观图北京景点故宫 夏日日落时分拍摄的南京市西部天际线全景图南京旅游 建筑唯美城市霓虹灯光背景图片 https://www.51miz.com/so-tupian/97902.html
21.3D卫星高清全景地图旅游出行下载无论身处何方,打开应用就能探索外面的美好世界,一键VR查看全球美景,更多功能等你去发现。 财神爷站提供3D卫星高清全景地图app官方版下载地址,有需要的用户可免费下载使用! 3D卫星高清全景地图软件特色 操作说明:进入街景菜单主页面,或在顶部输入想查看的景点“搜索国内地址,国外地址”,比如输入“故宫”,检索到以下信息http://www.csyz.com/detail/68752.html
22.旅游VR360全景视频免费下载3d打印3d打印 家装|工装家装|工装 材质贴图 贴图贴图 VRayVRay HDRIHDRI PBRPBR 平面 图标图标 元素元素 背景背景 PPTPPT 字体字体 动图动图 在线设计在线设计 样机样机 海报海报 插画插画 UIUI 淘宝淘宝 高清图库高清图库 免费商用(cc0)免费商用(cc0) https://www.aigei.com/view/217154.html?page=3
23.唄硶万里长城故宫3D立体纸雕日历便签带灯光手撕建筑模型文创纪念唄硶万里长城故宫3D立体纸雕日历便签带灯光手撕建筑模型文创纪念礼品 2025年全景圣诞树灯光日历 展13 已选 2025年全景圣诞树灯光日历 展13,1个 送至 北京朝阳区三环到四环之间 评价 *** 商品介绍 规格参数 售后保障 包装清单 商品参数 服务承诺 京东商城向您保证所售商品均为正品行货,京东自营商品http://item.m.jd.com/product/10135951931658.html
24.www.gdspr.cn/mmmj/791316.shtml大屁股风景区全景女厕偷拍 55.55MB 600好评 操日本老女人逼HD 黄片视频软件大载 男生舔女生阴道欧美性猛交?XX?乱下载 初撮六十路大屁股北森麻子 又黄又粗暴的gif动态图 83.68MB 4765好评十八女人水多一级毛片 故宫大班美术教案 99riav黑丝美女艹逼 夜夜嗨精品免费视频八月未央 性BBBBBWWhttp://www.gdspr.cn/mmmj/791316.shtml