Thomas L.
- Forum-Beiträge: 58
13.03.2012, 15:34:21 via Website
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:
(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 ?!
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);
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
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.