指南针demo
来源:互联网 发布:淘宝有销量没评价 编辑:程序博客网 时间:2024/04/28 14:45
初进公司,恰好遇到公司向通讯行业转型,新的手机产品有很多业务需要移植旧有的和新开发,指南针这个应用就属于新开发的。 在网上找了一些开源代码,比如说这个博客:Android 电子罗盘 --指南针(方向传感器的应用); 中心对称的指南针图片真的是太难找了,网上找了十几张指南针图片,放到app中之后都不是完全中对称的,于是我自己用viso画了一幅图,黑色表示北方,白色表示南方;这个指南针demo我做出来之后发现一个问题,就是当它旋转到临界点:比如说指向正北偏西1度角, 这个时候把手机逆时顺旋转2度,整个图形在顺时针旋转到十分接近北偏东度一度角时,会突兀地逆 时针旋转360度,这不合理,于是我问博主这个问题有没有什么好的解决方案?至今没有回复,于是我开始自己思考。
原方案如下:
float degree = event.values[0]; RotateAnimation ra = new RotateAnimation(currentDegree, -degree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //旋转过程持续时间 ra.setDuration(200); //罗盘图片使用旋转动画 imageView.startAnimation(ra);
解决方案如下,添加临界情况判断,我在logcat日志中打印degree、currentDegree和-degree的值,发现,几乎所有经过临界点的currentDegree值和-degree值都在【-360~-300或-50~0】,这样就可以增加一个判断:
xCoordinateValue = event.values[0]; float deGrees = xCoordinateValue; float fromDegrees = currentDgree; float toDegrees = -deGrees; final float roundAngle = 360f; final float criticalAngleMin = -250f; final float criticalAngleMax = -50f; setCoordinatesText(); if (fromDegrees >= criticalAngleMax && toDegrees <= criticalAngleMin) { toDegrees = toDegrees + roundAngle; StartAnimation(fromDegrees, toDegrees); currentDgree = toDegrees - roundAngle; } else if (fromDegrees <= criticalAngleMin && toDegrees >= criticalAngleMax) { fromDegrees = fromDegrees + roundAngle; StartAnimation(fromDegrees, toDegrees); currentDgree = toDegrees; } else { StartAnimation(fromDegrees, toDegrees); currentDgree = toDegrees; }
通过上述判断之后就可以有效地解决上述问题!另外如果有什么问题的话,欢迎交流!
源码下载路径如下:
源码百度云下载
CSDN免积分下载
1 0
- 指南针demo
- 指南针安卓demo
- 指南针
- 指南针
- 指南针
- 指南针
- 指南针
- 指南针
- 指南针
- 指南针 司南
- android 指南针
- android指南针
- android指南针
- Android 指南针
- IOS指南针
- 学习指南针
- 简易指南针
- 指南针SurfaceView
- PL/0语言编译程序分析
- 忘记Oracle数据库管理员密码的解决办法
- c++-file about
- BestCoder Round #88
- 编辑helloword
- 指南针demo
- hihocoder 118周 网络流四·最小路径覆盖(二分匹配,好题)
- 操作系统(一)概述
- 词法分析之动态字符串
- 2-SAT (Tarjan)—— Katu Puzzle ( POJ 3678 )
- 26. Remove Duplicates from Sorted Array
- strtok 分割字符串
- Java并发编程:线程池的使用
- 189. Rotate Array