2016-07-14 12 views
5

Ich versuche meine App so zu programmieren, dass mein ImageView eines Pfeils auf eine bestimmte android.Location zeigt. Gerade jetzt zeigt es nicht in die richtige Richtung. Es ist ziemlich aus irgendeinem Grund. Ich denke, es liegt daran, dass ich nicht in Betracht ziehe, in welche Richtung ich mich richtig stelle. HierDrehen eines ImageView auf eine gegebene Position in Längen- und Breitengrad

ist, was ich tue momentan:

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

Hier ist die GetAngle() Funktion:

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

Gibt es einen besseren Weg, dies zu tun, als wie ich bin? Ich habe keine Ahnung, wie ich ImageView dazu bringen kann, den Koordinaten gegenüberzustehen, die ich von einem Ort bekomme.

+1

lesen http://stackoverflow.com/questions/4308262/calculate-compass-bearing-heading-to-location-in-android. Dies ist die Antwort, nach der Sie suchen. –

Antwort

1

Erstens bin ich nicht sicher, warum Sie eine Bildansicht in einem Winkel drehen möchten. Aber wenn Sie denken, dass Sie die Bildansicht durch einen Marker ersetzen können, dann tun Sie dies.

Es gibt viele Vorteile in diesem Fall

  1. Leicht zu erreichen und setzen Rotation

  2. Ihre Rotation wird sehr glatt

Zweitens verwenden Marker, Verwendung Diese Funktion, um den Winkel zu erhalten

toAngle = startingLocation.bea ringTo (endende Position);

+0

Zeigt ein Marker nicht nur eine genaue Position? Ich möchte, dass ein Pfeil in eine Richtung weist, in der etwas ist. – saboehnke

+0

Setzen Sie das Symbol des Markers auf ein beliebiges Bild. In diesem Fall Ihr "Pfeil". Marker hat viele Vorteile gegenüber jeder Richtung in Bezug auf Richtung und Rotation –

+0

Muss ich eine Google Map verwenden? Weil ich nicht bin. Ich bekomme gerade den Längen- und Breitengrad von android.Location. – saboehnke

0

Aktualisieren Sie Ihren Code zunächst ohne Animation. Ich hatte das gleiche Problem, so dass die Animation möglicherweise neu startet oder bei einem anderen Verhalten aufhört.

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

Dies war nicht der Fix, aber ich schätze die Funktion setRotation() eher als eine Animation, also danke. – saboehnke

+0

@saboehnke Ich habe das gleiche Problem mit meiner benutzerdefinierten ListView - LinkedListView in GitHub. Ich möchte die Ansicht per Bildlauf animieren und die Animation starten, aber das war mein bi Problem. Also habe ich das Problem mit der Transformation für jede Aktion gelöst. – GensaGames