我正在制作一个指南针,指向用户定义的位置。我正在使用旋转动画来旋转针头。当指针指向手机的方向时,我就知道手机正指向我想要的方向。然而,我希望指针指向正确的方向,而不管手机的方位。
问题是,看起来旋转动画并不是根据真实世界的坐标旋转指针,而是相对于手机屏幕。因此,在现实世界中,针58度的旋转与58度的旋转并不匹配。这是真的吗?还是我在代码中犯了一个错误?
指南针是通过将手机的背部平放在表面上来使用的。我也尝试过输出方位角,结果是这样的:
Azimuth Actual Phone angle
0 0
45 90
90 180当它向后接近一个完整的圆周时,它会在120到340之间反弹。
代码如下:
direction = 360 - azimuth + rotate;
RotateAnimation animate = new RotateAnimation(rotateLast, direction, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animate.setFillAfter(true);
animate.setInterpolator(new LinearInterpolator());
animate.setDuration(10);
needle.startAnimation(animate);
rotateLast = direction;方位角是来自传感器的手机方位,旋转是用户指定的方向(从北开始的度数),方向是针所需的旋转。
rotateLast是指针的最后一个位置,我之所以使用这个,是因为如果没有它,指针就会恢复到零度并闪烁。
谢谢,附言,这让我抓狂
发布于 2012-07-05 12:57:35
我弄清楚了,我的数学都错了,我误解了方位角对旋转的影响。
当我将图像旋转到方位角时,我意识到这导致了针指向北方。我所需要做的就是添加用户方向。我使用的数学方法导致指针以不可预知的方式旋转。
答案很简单:
RotateAnimation animate = new RotateAnimation(-azimuth+rotation, -azimuth+rotation, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);-azimuth是因为旋转动画是逆时针旋转的。
https://stackoverflow.com/questions/11337347
复制相似问题