2015-09-18 22 views
5

Ich habe eine Galerie mit der recyclerview implementiert und ich habe eine onLayoutChangeListener zum Viewholder hinzugefügt, so dass nach der Berechnung des Layouts die Höhe der Bildansicht geändert wird, um den Aspekt des Bildes anzupassen Verhältnis. Es funktioniert gut, wenn Sie zuerst die Aktivität öffnen, das Gerät drehen oder den Bildschirm entsperren, aber wenn Sie von einer anderen Aktivität zurückkehren, funktioniert es nicht. Die Methode wird ausgeführt, aber die Bildansicht ändert sich nicht. Irgendeine Idee von was könnte das verursachen?Ändern der Größe einer Ansicht in OnLayoutChangeListener

 image.addOnLayoutChangeListener(new View.OnLayoutChangeListener(){ 
      @Override 
      public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
       ImageView img = (ImageView) v; 
       Bitmap bm = ((BitmapDrawable) img.getDrawable()).getBitmap(); 
       img.getLayoutParams().height = Utils.scaledHeight(bm.getWidth(), bm.getHeight(), img.getWidth()); 
       img.removeOnLayoutChangeListener(this); 
      } 
     }); 

Der Debugger zeigt die richtige Höhe eingestellt ist, aber die angezeigte Bildansicht ist nicht das, was es sein sollte.

Correct Image

Incorrect Image

+0

es hat möglicherweise etwas zu tun, wo Sie es onCreate() festlegen. Wenn Sie Ihr Telefon drehen, wird das Layout zerstört und neu erstellt, als ob Sie die App das erste Mal öffnen würden. Aber kommt von einer anderen App zurück, ruft nur onResume() ...... vielleicht ist hier das Problem .... – Opiatefuchs

+0

Wie wird die Breite bestimmt? Sie könnten dies mit 'android: adjustViewBounds =" true "' auf dem ImageView lösen. –

+0

@krislarson Danke, das hat das Problem gelöst. Ich wusste nicht, dass diese Option existiert. Anstatt den Listener zu benutzen, benutze ich einfach diese Option und jetzt funktioniert es immer. –

Antwort

1

Es sieht aus, als wenn du bist nur das richtige Seitenverhältnis auf einem ImageView zu bekommen versuchen.

ImageView hat eine Eigenschaft namens adjustViewBounds. Wenn Sie eine spezifische layout_width wie match_parent oder einen dp Wert haben, können Sie wrap_content für die layout_height angeben und android:adjustViewBounds="true" festlegen. Dies bewirkt, dass das ImageView automatisch das Seitenverhältnis des Bildes beim Messen der Höhe berücksichtigt.

Verwandte Themen