.getWidth() liefert 0 für ViewGroup zurück

  • Hallo Leute,


    ich bin gerade mit Hilfe eines Buches zur Android-Programmierung in Java eingestiegen und habe jetzt bei einer Android-App die ich am programmieren bin ein kleines Problem. Kurz zur Erklärung: es soll eine Art Snake-Spiel werden. Dazu habe ich eine GameActivity erstellt die dafür sorgt, dass alles was auf den Bildschirm gehört auch da landet. Im Layout der Activity ist ein FrameLayout eingebettet das als Spielbereich dient, dort sollen also alle Spielelemente reinkommen. Wenn jetzt ein neues Spiel gestartet wird, wird also die GameActivity gestartet und es soll direkt der erste Körperbaustein der Schlange in der Mitte des Spielbereichs erscheinen. Dazu soll die GameActivity eine ImageView in der Mitte des Bildschirms erstellen und mit dem Bild des Bausteins füllen. Bevor ich zum eigentlichen Problem komme, zeige ich euch am besten meinen Code


    Der Code der GameActivity:



    Das Problem das ich habe ist, dass die View nicht wie gewünscht in der Mitte des Spielbereichs angezeigt wird, sondern bei den Koordinaten (0,0), sprich der Körperbaustein lande oben links in der Ecke.
    Das liegt daran, dass in Zeile 21 und 24 die .getWidth() bzw. .getHeight() Methoden 0 zurückliefern (habe ich im Debugging festgestellt). Warum ist das so? Ich habe schon gelesen, dass das Layout evtl. noch nicht vollständig auf den Bildschirm gezeichnet wurde und das so lange die Methoden 0 zurückliefern. Wird das auch hier der Grund sein? Und wie kann ich das beheben, sodass meine ImageViews endlich in der Mitte des Spielbereichs auftauchen?


    Ich hoffe ihr könnt einem Anfänger helfen!


    MfG Minilulatsch

  • In der onCreate kannst du width/height der Views noch nicht ermitteln.


    Eine einfach Lösung ist:


    Java
    spielbereich.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                spielbereich.getHeight(); //height is ready
            }
        });


    Umfangreiche Infos dazu gibt es hier http://ux5.de/44m9 und hier http://ux5.de/44mf.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!