在我正在制作的Android应用中,我想检测用户手里拿着手机的时间,做出像投掷飞碟时的手势。我已经看到了几个实现此功能的应用程序,但我在网上找不到任何示例代码或教程。
对于如何做到这一点以及如何做到这一点会很棒。
使用一些示例代码或指向教程的链接会更好。
答案 0 :(得分:3)
Accelerometer为您提供了三维矢量流。如果你的手机有帮助,它的方向与地球重力拉力相反,尺寸相同。 (通过这种方式,您可以确定电话方向)
如果用户允许跌倒,矢量值将变为0(过程为空间站的失重)
如果用户在没有投掷的情况下做出一些手势,则直接移动,振幅将上升,然后下降然后再次上升(当用户停止移动时)。要确定它的外观,您可以通过记录加速度计数据和执行欲望手势来进行一些研究。
请记住,加速度计非常嘈杂 - 您必须对附近的值进行一些平均才能获得有意义的结果。
我认为匹配手势的一种可行方法是不变矩(如用于图像识别的胡矩) - 随着时间的推移加速度计矢量定义4维空间,并且您将需要一组缩放/旋转不变矩。设计这样的设置并不容易,但是复杂并不复杂。
在获得了你的时刻之后,你可以使用将矢量与群集匹配的标准技术。 (参见"时刻"和#34;来自我们的javaocr项目的集群"模块:http://javaocr.svn.sourceforge.net/viewvc/javaocr/trunk/plugins/)
PS:你可能会随着时间的推移而侥幸逃脱,这会产生二维空间,可以在现场用javaocr进行分析。答案 1 :(得分:0)
不完全符合您的要求:
Store orientation to an array - and compare
跟踪方向效果很好。也许您可以使用加速度计数据执行类似操作(无需任何集成)。
类似的问题是Drawing in air with Android phone。
我很好奇你会得到什么其他答案。