2015-09-18 2 views
5

Я реализовал галерею с использованием 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); 
      } 
     }); 

Отладчик показывает правильную высоту, но отображаемое изображение не является тем, чем должно быть.

Correct Image

Incorrect Image

+0

У него может быть что-то делать, когда вы устанавливаете его onCreate(). Если вы вращаете свой телефон, макет os будет уничтожен и снова создан, например, если вы открываете приложение в первый раз. Но, возвращаясь из другого приложения, только вызовы onResume() ... может быть, вот проблема ... – Opiatefuchs

+0

Как определяется ширина? Возможно, вы сможете решить эту проблему с помощью 'android: adjustViewBounds =" true "' на ImageView. –

+0

@ krislarson Спасибо, это решило проблему. Я не знал, что этот вариант существует. Вместо использования слушателя я просто использую этот параметр, и теперь он всегда работает. –

ответ

1

Это выглядит так, как будто вы просто пытаетесь получить надлежащее соотношение на качестве ImageView.

ImageView имеет свойство под названием adjustViewBounds. Если у вас определенная layout_width как match_parent или значение dp, вы можете указать wrap_content для layout_height и установить android:adjustViewBounds="true". Это приведет к тому, что ImageView будет автоматически учитывать пропорции изображения при измерении высоты.

Смежные вопросы