Android, Wie kann ich einen Pfeil (Bild) um einen festen Punkt drehen?

8

Ich habe ein Pfeilbild, das ich von 0 bis 180 Grad drehen möchte (wie die Nadel in einem Meter). Ein Punkt des Pfeils ist in der Mitte und unten auf dem Bildschirm fixiert und der Kopf des Pfeils sollte sich bewegen. Länge des Pfeils ist fix (es ist Bild). Ich habe auch zwei Tasten und ich will Pfeil nach links drehen, wenn die linke Taste berührt wird und rechts, wenn die rechte Taste berührt wird.

Was ist die Logik dieses Prozesses?

    
Hesam 14.09.2011, 08:56
quelle

5 Antworten

5

Das ist eigentlich ziemlich einfach, wenn Sie eine Zeichenfläche für Ihre Zeichnung verwenden (wie Sie es in Ihrem Fall tun sollten).

Wenn Sie die Koordinaten für den Punkt kennen, um den sich das Bild drehen soll, können Sie Folgendes tun:

%Vor%

Grad ist ein ganzzahliger Wert, den Sie erhöhen / verringern, wenn der Benutzer auf die Schaltflächen L oder R klickt. canvas.rotate kümmert sich um den Rest!

    
Emiam 01.10.2011 10:38
quelle
2

Sie müssen mit wahrscheinlich Animation mit 3D-Rotation in Android arbeiten und versuchen, auch usong Matrix Rotation ... Ich habe Bitmap-Code für diese .........

%Vor%

überprüfen Sie auch dies

Ссылка

    
Samir Mangroliya 14.09.2011 10:54
quelle
2

So gibt es die kurze Antwort und die lange Antwort.

Die kurze Antwort ist, dass die Rotation von Bitmaps und Leinwänden eine gebräuchliche Funktion ist, die normalerweise "rotieren" genannt wird und normalerweise den Punkt annimmt, um den herum gedreht werden soll.

Die längere Antwort ist, dass alle 2D- und 3D-Grafiken in einen Trick der Matrixalgebra übergehen. Für jeden Punkt:     neu_x = Faktor_1 * alt_x + Faktor_2 * alt_y + Faktor_3     ...

Diese Faktoren arbeiten wirklich gut in einer Matrix und deshalb wurde das Matrix-Ding so populär. Es gibt einen coolen Trick, bei dem du die Transformationen zusammenfügst, also kannst du deine Probleme wie folgt benennen: "Nimm die alte Leinwand, bewege sie so, dass der berührte Punkt der Ursprung ist, drehe ihn und bewege ihn dann so, dass der Ursprung wieder da ist der berührte Punkt. " Oder Matrix m = neue Matrix (). PostTranslate (-touch_x, -touch_y) .postRotate (360/20) .postTranslate (touch_x, touch_y), um es jedes Mal um 1/20 Kreise zu drehen. Dann übergeben Sie die Matrix an jede Funktion, die die "Transformations" -Matrix verwendet.

Die coole Sache ist, dass Sie alle Berechnungen für diese Matrix nur einmal durchführen und dann die gleichen 4 Multiplikationen für jeden Punkt und eine Menge Addieren verwenden. Tatsächlich ist das so üblich, dass Grafikkarten und der Intel-Befehlssatz diese Dinge in Hardware erledigen. Sie können das resultierende Bild auch einfach mit der gleichen Matrix multiplizieren, um den nächsten zu erhalten.

Nun, wenn Sie wirklich nach dem Grafik-Hack fragen, wie mache ich das in einem wahnsinnig schnellen Assembler-Code ohne Speicher, ist der Trick, Rotationen und Fehler in kleine Ketten zu wählen, wo Sie keinen Puffer brauchen. Zum Beispiel würde eine einfache 90-Grad-Drehung zuerst die vier Ecken tauschen, dann würde es tauschen (oben links + 1 links geht nach oben rechts + 1 nach unten, das nach unten rechts geht - 1 links, das nach links unten geht - 1 nach unten, welches geht zurück in die obere linke + 1). Diese Tricks sind normalerweise nur für Speicherbeschränkungen wichtig.

Viel zu viel Information. Erzähl uns mehr über dein Problem.

    
Charles Merriam 05.10.2011 07:02
quelle
1
%Vor%

Viel Glück!

    
QuickNick 03.10.2011 07:22
quelle
0

Ich sehe dieses Beispiel und habe mich angepasst um mehr oder weniger zu arbeiten, wie Sie brauchen, sehen Sie bitte das Beispiel für ein besseres Verständnis meines Codes:)

%Vor%

das xml von main

%Vor%     
ademar111190 21.06.2012 20:31
quelle

Tags und Links