2012-07-05 190 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具有相同的價值?它是否指向該位置? –