2012-07-05 104 views
0

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

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

rotateLast是针的最后位置,我使用这个,因为没有它,针返回零度并闪烁。

谢谢, P.S.这已经让我发疯了

回答

1

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

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

答案很简单:

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

- 方位是因为rotateanimation如何逆时针转动。

+1

嗯,你为什么使用fromDegree,toDegree具有相同的价值?它是否指向该位置? –