0

我正在制作一个指向用户定义位置的指南针。我正在使用旋转动画来旋转针。当针指向手机的方向时,我知道手机指向我想要的方向。但是,无论手机的方位如何,我都希望指针指向正确的方向。

问题是,rotateanimation 似乎没有根据真实世界的坐标旋转指针,而是相对于手机的屏幕。所以针的 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;

azimuth 是手机与传感器的方位角,rotate 是用户指定的方向(以北为单位的度数),direction 是指针所需的旋转方向。

rotateLast 是针的最后一个位置,我使用它是因为没有它针会恢复到零度并闪烁。

谢谢,PS这一直让我发疯

4

1 回答 1

1

我想通了,我的数学全错了,我误解了方位角如何影响旋转。

当我将图像旋转到方位角时,我意识到它导致指针指向北方。我需要做的只是添加用户方向。我使用的数学导致指针以不可预知的方式旋转。

答案很简单:

RotateAnimation animate = new RotateAnimation(-azimuth+rotation, -azimuth+rotation, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

-azimuth 是因为 rotateanimation 如何逆时针旋转。

于 2012-07-05T04:57:34.673 回答