Erste Grafik auf Canvas in View bei Programmstart

  • 3 Antworten
  • Letztes Antwortdatum
A

astro-android

Neues Mitglied
2
Seid gegrüßt,

Gerade war ich schon einmal hier wegen eines anderen Problems, welches bereits gelöst ist ! Es war eines von 2 Problemen, mit denen ich mich nun schon länger rumschlage. Das hat mich ermuntert, mein 2. (und vorerst hoffentlich letztes !) Android-Problem mal zu beschreiben:

Meine App hatte ich gerade schon mal kurz beschrieben. Es geht um ein LinearLayout mit einer Custom View. Es gibt eine FragmentActivity in dessen Pageradapter ich das Layout entfalte.

Die Custom View berechnet die Koordinaten und zeichnet eine Grafik.

Das funktioniert einwandfrei, wenn ich das mit Events (z.B. Buttons) initiiere.

Die Grafik soll aber auch beim Start der App direkt mit default-Daten gerechnet und angezeigt werden. Im Konstruktor der View funktioniert das nicht. Es gibt auch kein onCreate oder so in einer View. Aus dem PageAdapter geht es nicht.

Problem ist wohl, dass die Canvas jeweils noch nicht startklar (bereit) ist. Kann man das abfragen ?

Oder kann mir jemand sagen, wie man das korrekt macht ?

es dankt Euch
Astroidus :razz:
 
Zuletzt bearbeitet:
Seid gegrüßt

Der ursprüngliche Beitrag von 18:56 Uhr wurde um 19:07 Uhr ergänzt:

sorry, irgendwie auf falsche Taste gedrückt. Ändern geht nicht...

also nochmal: geht das vielleicht in onInflate() in der View ? Brauch ich dazu einen Listener oder gar Stub ? onInflate lässt sich jedenfalls nicht überschreiben, ist also nicht da. In der Referenz steht da was anderes. Hat vielleicht jemand einen Tip, Link oder besser noch ein Beispiel ?

Irgendwer müsste das doch wissen. Hab im Internet nichts brauchbares gefunden.
 
Ich hab noch keine eigene View geschrieben, aber mal gerade in die Docs geguckt.
evtl hilft dir:
setMeasuredDimension
wenn du dort deine dinge erledigst, hier ist die größe schon bekannt

es gibt auch noch
View | Android Developers

Hilft das nicht?
 
Hi amfa,

die Größe weiss ich erst in onMeasure(...) vor dem (ersten ?) onDraw(...). Da mach ich auch am Ende setMeasuredDimension(...). Hier weiss ich zum ersten Mal die Größe, richtig ! Wenn ich hier was zeichnen will, geht das nicht (nullPointer beim Canvas-Bitmap, wird in onDraw(...) generiert) ! Also habe ich es in onFinishInflate() probiert, Geht auch nicht. Genau da bin ich gerade dran. Versuche gerade, die Reihenfolge der 3 Aufrufe rauszukriegen. Ich muss das Bitmap vor dem Zeichen fertig haben. Da liegt glaube ich der Hase im Pfeffer... :blushing:

Grüße ;)

Der ursprüngliche Beitrag von 01:33 Uhr wurde um 02:36 Uhr ergänzt:

Hallo nochmal,

Problem gelöst ! Die Abmessungen der Custom-View sind erstmalig nach dem Entfalten in onMeasure() definiert, vorher in onFinishInflate() noch nicht ! :flapper:. Wenn man in onMeasure() also dann das CanvasBitmap erzeugt, kann man danach auch direkt zeichnen.

Warum ist sowas wie zum Bleistift die genaue Abfolge von solchen Prozessen um Himmels Willen nirgendwo (?) dokumentiert ? :confused: Wäre eigentlich für alle Beteiligten von Vorteil, wenn solche Sachen in der Google-Referenz stünden.:smile: Würden alle ne Menge Zeit sparen. :rolleyes2: Oder gibt es da noch ne andere, bessere Referenz für Android ?

Grüße
 
Zurück
Oben Unten