2016-07-14 7 views
5

Próbuję zaprogramować moją aplikację, aby mój widok z lewej strzałki wskazywał lokalizację android.Location. W tej chwili nie wskazuje właściwego kierunku. Z jakiegoś powodu jest całkiem nieźle. Myślę, że to dlatego, że nie biorę pod uwagę, w jakim kierunku mam się właściwie.Obracanie obrazu, aby zmierzyć się z daną pozycją w szerokości i długości geograficznej

Oto co robię obecnie:

float angle = GetAngle(myLocation); 
RotateAnimation anim = new RotateAnimation(0.0f, angle, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
anim.setInterpolator(new LinearInterpolator()); 
anim.setRepeatCount(0); 
anim.setDuration(2); 
anim.setFillAfter(true); 
arrow.startAnimation(anim); 

Oto GetAngle() funkcja:

float GetAngle(Location myLocation) 
{ 
    float angle = (float) Math.toDegrees(Math.atan2(theirLocation.getLatitude() - myLocation.getLatitude(), theirLocation.getLongitude() - myLocation.getLongitude())); 
    if (angle < 0) 
     angle += 360; 
    return angle; 
} 

Czy istnieje lepszy sposób to zrobić niż jak ja? Nie mam pojęcia, jak ustawić widok obrazu w stronę współrzędnych, które otrzymuję z danej lokalizacji.

+1

Przeczytaj http://stackoverflow.com/questions/4308262/calculate-compass-bearing-heading-to-location-in-android. To jest odpowiedź, której szukasz. –

Odpowiedz

1

Po pierwsze, nie wiem, dlaczego widok obrazu ma się obracać pod kątem. Ale jeśli myślisz, że możesz zastąpić widok obrazu znacznikiem, zrób to.

Istnieje wiele zalet korzystania z markera w tym przypadku

  1. łatwo dostać i ustawić obrót

  2. rotacji będzie bardzo gładka

drugie, stosowanie tej funkcji, aby uzyskać kąt:

toAngle = startingLocation.bea ringTo (endingLocation);

+0

Czy znacznik nie pokazuje dokładnej lokalizacji? Chcę, by strzałka wskazywała kierunek, w którym coś jest. – saboehnke

+0

Ustaw ikonę znacznika na dowolny obraz, który chcesz. W tym przypadku twoja "strzałka". Marker ma wiele zalet w stosunku do każdego widoku pod względem kierunku i obrotu –

+0

Czy muszę używać mapy google? Ponieważ nie jestem. Po prostu otrzymuję szerokość i długość geograficzną z androida. Lokalizacja. – saboehnke

0

Zaktualizuj kod bez animacji, na początku. Miałem ten sam problem, więc animacja może się ponownie uruchomić lub zatrzymać na innym zachowaniu.

float angle = GetAngle(myLocation); 
myView.setRotation(angle); 
//Or also check 
myView.setRotationX(angle); 
myView.setRotationY(angle); 
+0

To nie była poprawka, ale doceniam funkcję setRotation(), a nie animację, więc dziękuję. – saboehnke

+0

@saboehnke Mam ten sam problem z moim niestandardowym listview - LinkedListView in github. Chcę animować widok na przewijanie i rozpocząć animację, ale to był mój problem. Rozwiązałem więc problem z transformacją na każde działanie. – GensaGames