2016-07-14 76 views
5

Sto provando a programmare la mia app in modo che il mio ImageView di una freccia punti ad un dato android.Location. In questo momento non punta nella giusta direzione. È piuttosto spento per qualche motivo. Penso che sia perché non sto prendendo in considerazione quale direzione sto affrontando correttamente.Rotazione di ImageView per affrontare una data posizione in latitudine e longitudine

Ecco quello che sto facendo attualmente:

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); 

Ecco la) Funzione GetAngle (:

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; 
} 

C'è un modo migliore per farlo che come sono io? Non ho idea di come ottenere ImageView da affrontare verso le coordinate che mi danno da una posizione.

+1

Leggi http://stackoverflow.com/questions/4308262/calculate-compass-bearing-heading-to-location-in-android. Questa è la risposta che stai cercando. –

risposta

1

In primo luogo, non sono sicuro del motivo per cui si desidera ruotare una vista dell'immagine in un angolo. Ma se pensi di poter sostituire la visualizzazione di immagini con un pennarello, fallo.

Ci sono un sacco di vantaggi di usare marcatore in questo caso

  1. Facile da raggiungere e la rotazione impostare

  2. tuo rotazione sarà molto liscia

In secondo luogo, l'uso questa funzione per ottenere l'angolo

toAngle = startingLocation.bea Ringto (endingLocation);

+0

Non un indicatore mostra solo una posizione precisa? Sto volendo una freccia per indicare in una direzione che qualcosa è. – saboehnke

+0

Imposta l'icona dell'indicatore su qualsiasi immagine desideri. In questo caso la tua "freccia". Marker ha molti vantaggi su qualsiasi vista in termini di direzione e rotazione –

+0

Devo usare una mappa di google? Perché io non lo sono. Sto ottenendo solo latitudine e longitudine da android.Location. – saboehnke

0

Aggiornare il codice senza animazione, all'inizio. Ho avuto lo stesso problema, quindi l'animazione potrebbe riavviarsi o fermarsi con un comportamento diverso.

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

Questa non era la soluzione, ma apprezzo la funzione setRotation() piuttosto che usare un'animazione quindi grazie. – saboehnke

+0

@saboehnke Ho avuto lo stesso problema con il mio listview personalizzato - LinkedListView in github. Voglio animare la vista per lo scorrimento e avviare l'animazione, ma era il mio problema. Quindi ho risolto il problema con la semplice trasformazione per ogni azione con esso. – GensaGames