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.
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
Wie wird die Breite bestimmt? Sie könnten dies mit 'android: adjustViewBounds =" true "' auf dem ImageView lösen. –
@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. –