0

我有一個帶有ImageView的MapView,並帶有指向特定位置的箭頭。我正在通過旋轉ImageView,通過getOrientation() - 通過geoField.getDeclination()獲取標題並使用myLocation.bearingTo(finalDestiny)來計算指南針的方位(方向)來進行指示。如何在不啓用指南針的情況下計算getOrientation()?

該算法完美地工作,我得到的箭頭正好指向我想要的地方。唯一的問題是能夠getOrientation()需要enableCompass(),否則返回NaN。與此同時,enableCompass()在MapView上繪製默認的Google羅盤,我不想顯示它。

我該怎麼做?有可能使用傳感器「手動」計算這個軸承,所以我不需要使用enableCompass()?

+0

是的它可能,你應該看看:android傳感器方向。但是你將不得不做一些數學工作。 – Warpzit

+0

或者,您應該使用隱藏的地圖視圖;) – Warpzit

回答

2

你應該實現一個類擴展MyLocationOverlay和覆蓋drawCompass()沒有任何代碼,我只是嘗試它,並完美地工作。在你的活動中,enableCompass()不會繪製指南針。

public class CustomMyLocation extends MyLocationOverlay { 
//... 


    @Override 
    protected void drawCompass(Canvas canvas, float bearing) { 
    } 
} 
+0

我雖然沒有,但它的作品非常好。然後,您可以啓用指南針,以便獲取方向,但隱藏它或繪製任何您想要的。 – shkschneider

+0

非常優雅的解決方案,不錯的工作! – BasicPleasureModel

+0

工作很好,謝謝! –

1

我們可以計算軸承手動兩個位置之間 軸承可以通過

float bearing = mLoc.bearingTo(mLocTarget); 
if(bearing<0){ 
bearing+=360; 
} 

普通羅盤方位來計算,可以計算出使用傳感器:

float newDirection=0; 
if(mSensors!=null) 
newDirection=-mSensors[0]; 
if((newDirection-mCurDirection)> 180) 
newDirection-=360; 
else if((mCurDirection-newDirection)> 180) 
newDirection+=360; 
+0

您是否檢查了此代碼? – ponraj

相關問題