在进行IBEACON定位时的可视化处理
在进行IBEACON定位时的可视化处理
- 写在前面
- 准备工作
- 布局设置
- 代码设置
- 写在最后
写在前面
以我们所使用的例程来说,我们为了在实现蓝牙定位的基础上而不影响其他功能的使用在原有功能的基础上新建了一个GET LOCATION的功能并且已经实现了实时更新我们已经设置好的ibeacon的RSSI的值。如图所示(请不要吐槽我们给ibeacon起的名字)
准备工作
为了将我们得到的RSSI的值变成一张便于理解的坐标图,我们需要首先画上一张坐标图,我们随便画了一张坐标图,因为是随便画的,最后是一个13x13的正方形。
然后再随意做一个点,作为坐标系中被定位的目标。到此为止我们的准备步骤算是做好了。
布局设置
这个当然是看自己的喜好自己布局了,我们使用的是FrameLayout来装载坐标图的。
代码设置
重点的部分来了,因为我们使用的手机的分辨率各不相同,为了使我们的坐标图在各个手机上都能够正常且合理的显示,我们需要使用一些函数来获取屏幕的宽度。幸运的是,我们找到的例程中自带getScreenWidth函数,使我们可以很方便地获取屏幕的宽度,但即使我们没有使用例程,也可以自己做一个getScreenWidth函数。有关的网站链接(https://www.cnblogs.com/H-BolinBlog/p/6878469.html)
public int getScreenWidth() {DisplayMetrics dm = new DisplayMetrics();this.getWindowManager().getDefaultDisplay().getMetrics(dm);int screenWidth = dm.widthPixels;return screenWidth;}
这样我们只需要使用getScreenWidth()即可得到屏幕宽度了。
并且我们不仅可以从中得到屏幕的宽度(widthPixels),高度(heightPixels),dpi(densityDpi),屏幕密度(density)都能得到,只需将括号内的东西替换或再重新创建一个函数即可。
然后我们得到了想要的屏幕宽度,怎么设置layout的宽度和长度为合适的值呢?我们可以使用 findViewById().getLayoutParams()来得到其布局,并使用findViewById().setLayoutParams()来设置其布局,如下我们定义了一个layout变量来存储布局设置应对其更改再设置。
ViewGroup.LayoutParams layout=findViewById(R.id.frame).getLayoutParams();//定义一个LayoutParams型的变量layout值为frame的layoutparamslayout.width=getScreenWidth();//这里我们直接使用getScreenWidth()函数方便一些findViewById(R.id.frame).setLayoutParams(layout); //frame为我们设置的framelayout的id
然后这些都做完后,就是点的坐标的设置。我们本来也想用findViewById()这种方法的但是发现其中的setTranslationX()与setTranslationY()虽然能够更改点的坐标,但是和我们之前get到的屏幕宽度不匹配,在此我翻了很多东西,如(https://www.cnblogs.com/JLZT1223/p/6784449.html)。又用上文所说的屏幕密度和dpi等值进行各种加减乘除运算都不能很好的将其与点的坐标匹配,最后无奈只能另选他法使用更改margin的值来更改点的位置,很不巧findViewById中并没有setMargin函数,但幸好有方法解决(https://thierry-xing.iteye.com/blog/1379202),在此列出代码
int width=getScreenWidth();FrameLayout.LayoutParams dotpos= new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT);dotpos.setMargins(width-50,width-50,0,0);findViewById(R.id.dot).setLayoutParams(dotpos);
其中dotpos为我们设置的变量,需要注意的是,如果你的点图片的父布局不是FrameLayout,那么你需要将上文中的FrameLayout改成你的点图片的父布局,不然程序会崩溃。在setMargins中的四个分别为(左,上,右,下),而-50是因为这里的坐标是指点图片左上角的坐标,可想而知当他的值设置width(即屏幕宽度)时,这个点就跑出屏幕了,你也可以试试发现的确是这样,这个-50就是适当的回调。上面的函数在我们的程序撒谎那个的效果是这样的。
发现这个点的确跑到了图片的右下角,至此我们已经实现了ibeacon定位的可视化操作,接下来只需更改setMargins中的数值即可。
写在最后
这是我们小组的第一个博客,写的不好请见谅。我们也是一边学习一边在做并且说实话上面的东西我还是没有弄明白,就当给大家一个参考。我会陆陆续续将我们小组之前所做的东西以同样的形式上传出来,希望能对大家有帮助。如果有问题请指出让我知道,我会及时更改或者干脆不改了直接删除(笑)。
在进行IBEACON定位时的可视化处理相关推荐
- 在进行IBEACON定位时所应考虑到的误差与建议
写在前面 我们小组从策划ibeacon定位开始到现在进行到了最为关键的阶段,我们了解了现在流行的三点定位法和指纹法并进行了大量的讨论,我们得出了很多有用的结论也考虑到了很多可能存在的会影响到探测精度的 ...
- 使用scrollIntoView方法解决抛锚定位时网页往上跳的问题
一直都是使用抛锚location.href = "page.htm#anchor";在页面定位位置,但是经常会出现在抛锚定位时页面整体往上跳的问题,每一次都是怀疑页面div+css ...
- android 百度地图闪退,Android使用百度地图出现闪退及定位时显示蓝屏问题的解决方法...
使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.xml文件中未在application标签中配置 android:name="com.baidu.lbsapi.A ...
- 蓝牙定位方案之Ibeacon定位技术解决方案-新导智能
低功耗蓝牙定位方案以及寻向的一些使用计划,在一些博物馆.大型的超市.机场.购物中心现已完成,现在人员定位基本上要用手机,蓝牙在手机傍边的普及率几乎是100%,一起蓝牙又是一个全产业链的一个供应方法.如 ...
- 蓝牙Ibeacon定位技术之室内定位--室内定位系统--新导智能
随着蓝牙定位技术的发展,蓝牙定位应用场景越来越广泛,商场,停车场,化工厂,养老院等等.蓝牙定位还分好多种,蓝牙网关,蓝牙iBeacon定位技术,目前蓝牙iBeacon定位技术应用最广泛,我们一起来了解 ...
- 三友硅业基于Lora+IBeacon定位技术下的化工厂人员定位解决方案-化工厂定位-新导智能
三友硅业因为厂区的发展,目前的安全管理系统存在着整体上的漏洞,达不到上级主管单位以及安全生产监管部门的需要,在员工进出厂区记录与追溯,生产区人员分布与统计,危险区域人员进出控制,外来人员与车辆进出管理 ...
- 如何获取某个标签下所有的元素id_D3库实践笔记之元素定位与数据绑定 |可视化系列33...
D3根据数据的内容操纵HTML文档对象,实现把数据变成可视图.要操纵文档对象,例如在里添加一个.编辑标签里的一个矩形,要完成这些首先需要能定位到我们需要操作的元素.再结合数据操作这些元素. 本篇具体展 ...
- vs运行时 文本可视化工具 无法点开_webpack 优化:2 款工具帮你找到构建速度“变慢”的原因...
前言 随着前端工程化的开发方式日益完善,像 webpack.rollup.gulp 等工具已经融入到我们的日常开发之中.最常见的就是 webpack ,一个模块打包工具. 但随着项目的功能需求迭代,代 ...
- GPS、LBS、AGPS、WIFI、iBeacon定位区别
相关文章: GPS概述(定位原理.系统组成及工作频段) 目录 一.GPS定位 二.LBS(基站)定位 三.AGPS定位 四.WIFI定位 五.iBeacon(蓝牙)定位 一.GPS定位 原理:接收机接 ...
最新文章
- 第一次使用Android Studio时你应该知道的一切配置
- 皮一皮:爷的青春一去不回了...
- centos运行jar包需要的环境_CentOS 7.4下运行jar包
- [html] title与h1的区别、b与strong的区别、i与em的区别?
- P2415 集合求和(python3实现)
- linux mongodb服务启动命令行,Linux下安装、启动、停止mongodb
- 面试指南(一):想跳槽,你真的做好准备了吗?
- japid-conf目录文件配置
- 在Web开发中完美控制IE标题栏
- IT给生活带来了什么?
- linux主机如何安装杀毒软件,Linux 杀毒软件ClamAV安装部署
- 红警2科技时代2.7正式版
- 街头篮球服务器位置,求街头篮球各个服务器IP地址
- 读书笔记:《活出生命的意义》
- duration java_Java Duration类| 带示例的multipliedBy()方法
- 关于FPGA实时数字FIR滤波器的实现
- git fetch 理解
- 建筑施工复习资料-立杆基础
- 电子版微积分,知识共享,数学真知传四方
- OSError: exception: access violation writing,