Я реализовал галерею с использованием recyclerview, и я добавил onLayoutChangeListener для зрителя, чтобы после вычисления макета высота изображения была изменена в соответствии с аспектом изображения соотношение. Он отлично работает при первом открытии операции, вращении устройства или разблокировке экрана, но при возврате из другой активности он не работает. Метод выполняется, но изображение не изменяется. Любая идея о том, что может быть причиной этого?Изменение размера представления в 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);
}
});
Отладчик показывает правильную высоту, но отображаемое изображение не является тем, чем должно быть.
У него может быть что-то делать, когда вы устанавливаете его onCreate(). Если вы вращаете свой телефон, макет os будет уничтожен и снова создан, например, если вы открываете приложение в первый раз. Но, возвращаясь из другого приложения, только вызовы onResume() ... может быть, вот проблема ... – Opiatefuchs
Как определяется ширина? Возможно, вы сможете решить эту проблему с помощью 'android: adjustViewBounds =" true "' на ImageView. –
@ krislarson Спасибо, это решило проблему. Я не знал, что этот вариант существует. Вместо использования слушателя я просто использую этот параметр, и теперь он всегда работает. –