我正在制作一个指向用户定义位置的指南针。我正在使用旋转动画来旋转针。当针指向手机的方向时,我知道手机指向我想要的方向。但是,无论手机的方位如何,我都希望指针指向正确的方向。
问题是,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这一直让我发疯