2012-12-25 5 views
5

Ich habe Probleme mit der getWidth/getheight Funktion von ImageView. Meine xml ist wie folgt:Android ImageView return getWidth, getHeight null

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/bonus_popup" 
    android:visibility="gone" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <ImageView 
     android:id="@+id/todaybonus" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:adjustViewBounds="true" 
     android:src="@drawable/startscreen_todaybonus" /> 
    <ImageView android:id="@+id/ok_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="acceptBonus" 
     android:background="#000000"></ImageView> 
</RelativeLayout> 

und mein Code ist wie folgt:

if (isDisplayBonus){ 
    set_blur_background(); 
    bonusPopup.setVisibility(0); 
    Log.i(TAG, "Bonus width: " + todayBonus.getWidth()); 
    Log.i(TAG, "Bonus height: " + todayBonus.getHeight()); 
} 

Bitte helfen Sie mir dieses proble zu lösen ,. Vielen Dank im Voraus.

+0

Was ist BonusPopup hier? Fügen Sie den relevanten Teil mindestens ein. –

+0

Hallo Gaurav, bonusPopup ist das relative Layout –

+1

Aktivitätscode? von oben nach unten. –

Antwort

3

Möglicherweise rufen Sie getWidth() und getHeight() zu früh an. Die Benutzeroberfläche wurde noch nicht skaliert und auf dem Bildschirm angezeigt. Daher geben die Methoden korrekt 0 zurück. Überprüfen Sie den gesamten Code erneut. Oder fügen Sie hier Ihren vollständigen Code ein.

+0

Ich habe meinen Code schon hier eingetragen. Ich habe die Funktion getWidth aufgerufen, nachdem ich die Ansicht angezeigt hatte. –

+0

ein "kann sein" und "bitte zeigen Sie mehr" Antwort – Dagon

8

Nun, ich habe den Grund gefunden. Wenn ich die Sichtbarkeit festlegte, war die Ansicht nicht wirklich gezeichnet worden, also konnte ich getHeight und getWidth Funktion nicht verwenden. Ich fand die Lösung: Verwenden Sie ViewTreeObserver

todayBonus.getViewTreeObserver().addOnPreDrawListener(
    new ViewTreeObserver.OnPreDrawListener() { 
     public boolean onPreDraw() { 
     int finalHeight = todayBonus.getMeasuredHeight(); 
     int finalWidth = todayBonus.getMeasuredWidth(); 
      // Do your work here 
      return true; 
    } 
    }); 
+1

wo setzen Sie das? In der OnCreate-Methode? – yrazlik

+0

PLZ sagen Sie mir, wenn Sie es herausfinden – ChuckKelly