Rotationmatrix hat Einfluss auf Layout?

  • Antworten:3
Thomas L.
  • Forum-Beiträge: 58

13.03.2012, 15:34:21 via Website

Hallo alle zusammen ... ich hab jetzt mal wieder nach ner einjährigen Pause angefangen weiter für Android zu programmieren.
Ich wollte mal Probehalber einen kleinen Tacho programmieren, der vllt ma mit GPS Daten gefüttert wird ... whatever.

Der Tacho ist als background einer ImageView dargestellt, und die Imageview an sich beherbergt das Bild der Nadel.
Nun soll der Tacho im Testlauf einmal auf 120 drehen, und dann wieder zurück. 1km/h entspricht in meiner Zeichnung einem Winkel von 2.25°

Ich lasse nun die Nadel mit einer Rotationmatrix drehen:

1float ancle = (float) (deltaspeed * 2.25);
2matrix.postRotate(ancle);
3Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), matrix, true);
4imgNeedle.setImageBitmap(bMapRotate);

(später soll noch ein sauberer Linearinterpolator dazu, aber erstmal anderes Problem ^^)

Funktioniert auch einwandfrei, bis auf die Tatsache, dass sich der Tacho jetzt beim drehen der Nadel ekelhaft verzerrt.
Ich vermute, dass es an der gedrehten Rotationsmatrix liegt, die ja wieder in das ImageView gezeichnet wird.
Die Diagonale h des Bildes ist natürlich größer als die Seitenlänge a. Somit vermute ich, dass das Imageview bei einer Drehung der Nadel von 45° in der Höhe nicht mehr a sondern h beträgt.



Was kann ich dagegen unternehmen, so dass mein Tacho nach Möglichkeit rund bleibt und kein Ei wird ?!

— geändert am 13.03.2012, 15:40:08

Antworten
reiti.net
  • Forum-Beiträge: 339

13.03.2012, 15:44:20 via Website

so wie ich das verstanden habe brauchst du dazu ein Bild mit gleicher seitenlänge in der mittig die tachonadel gezeichnet ist - also ursprung tachonadel = bildmitte. und das bild muss dann natürlich um diesen mittelpunkt gedreht werden.

— geändert am 13.03.2012, 15:46:33

Antworten
Thomas L.
  • Forum-Beiträge: 58

13.03.2012, 15:52:12 via Website

Sorry wenn es etwas unklar formuliert war.
Nochmal :wink:

Das Bild vom Tacho ist ohne die Nadel, hat die Seitenlänge 480x480.
Das Bild der Nadel hat ebenfalls die Seitenlänge 480x480 und der Bildmittelpunkt ist der Ursprung der Nadel.

Das Imageview hat als Source das Bild der Nadel und als Background das Bild des Tachos.
Das drehen funktioniert, aber eben mit entsprechender sehr unschöner Verzerrung.

Antworten
Thomas L.
  • Forum-Beiträge: 58

14.03.2012, 23:11:03 via Website

Bin ärgerlicherweise immer noch nicht weiter.
Ich spiele derzeit mit dem Gedanken, die Grafik der Nadel kleiner zu machen als den Tacho.
Dann müsste ich die Nadel drehen, und genau so in das Canvas zeichnen, dass die Mitte passt.
Kann man ein Bild so drehen, dass man es nicht um den Mittelpunkt dreht, sondern einen anderen spezifizierten Punkt (also in meinem Fall, dann den Ursprung der Nadel?)
Oder ist dies nur möglich, indem ich Rotation und Translation selbstständig vornehme?

Antworten