Ich habe über einen Tag nach einer Lösung für dieses Problem gesucht, aber nichts hilft, selbst die Antworten hier. Die Dokumentation erklärt auch nichts.
Ich versuche einfach, eine Drehung in Richtung eines anderen Objekts zu bekommen. Das Problem ist, dass die Bitmap nicht um einen festen Punkt gedreht wird, sondern um die Bitmaps (0,0).
Hier ist der Code, mit dem ich Probleme habe:
Matrix mtx = new Matrix();
mtx.reset();
mtx.preTranslate(-centerX, -centerY);
mtx.setRotate((float)direction, -centerX, -centerY);
mtx.postTranslate(pivotX, pivotY);
Bitmap rotatedBMP = Bitmap.createBitmap(bitmap, 0, 0, spriteWidth, spriteHeight, mtx, true);
this.bitmap = rotatedBMP;
Der seltsame Teil ist, dass es keine Rolle spielt, wie ich die Werte in pre
/ postTranslate()
und die float-Argumente in ändere setRotation()
. Kann mir bitte jemand helfen und mich in die richtige Richtung drängen? :) :)
new
bearbeitete Matrix nicht zurücksetzen . Es ist schon die Identität.Antworten:
Ich hoffe, die folgende Codesequenz hilft Ihnen:
Wenn Sie die folgende Methode von überprüfen
~frameworks\base\graphics\java\android\graphics\Bitmap.java
Dies würde erklären, was es mit Rotation und Übersetzung macht.
quelle
Bearbeitet : optimierter Code.
So erhalten Sie Bitmap aus Ressourcen:
quelle
Ich bin jetzt, da wir das Spiel fertigstellen, auf dieses Problem zurückgekommen und habe nur darüber nachgedacht, zu posten, was für mich funktioniert hat.
Dies ist die Methode zum Drehen der Matrix:
(
this.getCenterX()
ist im Grunde die Bitmaps X Position + die Bitmaps Breite / 2)Und die Methode zum Zeichnen der Bitmap (über eine
RenderManager
Klasse aufgerufen ):canvas.drawBitmap(this.bitmap, this.matrix, null);
Es ist also ziemlich einfach, aber ich finde es etwas seltsam, dass ich es nicht zum Laufen bringen konnte,
setRotate
gefolgt vonpostTranslate
. Vielleicht wissen einige, warum das nicht funktioniert? Jetzt drehen sich alle Bitmaps richtig, aber es ist nicht ohne eine geringfügige Abnahme der Bitmap-Qualität: /Trotzdem danke für deine Hilfe!
quelle
Sie können das auch drehen
ImageView
mitRotateAnimation
:quelle
Sie können Folgendes verwenden:
quelle
Schauen Sie sich das Beispiel von Google namens Lunar Lander an, das Schiffsbild dort wird dynamisch gedreht.
Lunar Lander Codebeispiel
quelle
Ich habe diese Konfigurationen verwendet und habe immer noch das Problem der Pixelung:
quelle
quelle