2016-04-08 26 views
1

Ich erstelle eine Android-Anwendung, die ziemlich viel Verarbeitung innerhalb der onDraw(Canvas canvas) Methode meiner View Klasse. Die Anwendung erzwingt Hochformat.Android Leinwand Breite und Höhe Flüchtigkeit

Meine Frage ist, wie sicher ist es anzunehmen, dass sich die Höhe und Breite der Leinwand zwischen den Aufrufen der Malmethode nicht ändern wird? Der Grund, den ich stelle, ist, dass ich dann diese Werte verwende, um einige Objekte zu erstellen, die ich während der onDraw-Methode verwende. Wenn ich annehme, dass Höhe und Breite sich nicht ändern, kann ich die ungefähr 30 Objekte zwischenspeichern, die erstellt werden, wenn die onDraw-Methode zuerst aufgerufen wird.

Ich habe ziemlich viel Swing-Programmierung gemacht und das ist definitiv etwas, das Sie in Swing nicht tun würden, aber es scheint mir, dass die Höhe und Breite von jemandes Telefon sich kaum ändern wird.

Ist das eine korrekte Annahme? Ich habe es ausprobiert und es funktioniert perfekt, aber ich bin besorgt, dass es ein Problem geben könnte, das ich nicht geschätzt habe.

Danke für jede Anleitung!

Antwort

1

Es hängt alles von den Dingen ab, die Ihrem View passieren können. Was im Grunde bedeutet: Es hängt von Ihrem layout und von den Dingen ab, die Sie mit Ihrem View planen.

Also ... können Sie sicher annehmen, dass die Größe Ihrer canvas nicht ändert, solange Sie sicherstellen können, dass die Größe Ihrer View wird nicht geändert. Wenn nichts Ihre View zwingen kann, die Größe zu ändern, wird Ihre canvas' Größe gleich bleiben.

Die einfachste Methode, um dieses Problem zu überwinden, ist es, alle Objektzuordnungen zu bewegen, um die onSizeChanged Methode Ihrer View (oder zu onLayout) (die nicht in der onDraw Methode sowieso sitzen soll). Auf diese Weise können Ihre Objekte jedes Mal neu initialisiert oder korrigiert werden, wenn Ihre View's Größe (aufgrund von etwas) geändert wird, um ordnungsgemäß mit Ihrem drawing Prozess zu arbeiten.

+0

'OnSizeChanged' Methode klingt definitiv wie der sicherste Weg zu gehen - danke! – StuPointerException