2015-09-18 26 views
5

Zaimplementowałem galerię wykorzystującą widok recyclerview i dodałem obiekt onLayoutChangeListener do elementu podglądu, aby po obliczeniu układu wysokość widoku obrazu została zmieniona tak, aby pasowała do aspektu obrazu stosunek. Działa dobrze po pierwszym otwarciu aktywności, obróceniu urządzenia lub odblokowaniu ekranu, ale po powrocie z innej aktywności nie działa. Metoda jest wykonywana, ale widok obrazu się nie zmienia. Masz pojęcie, co może być przyczyną tego?Zmiana rozmiaru widoku w 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); 
      } 
     }); 

Debugger pokazuje ustawioną wysokość, ale wyświetlany obraz nie jest tym, czym powinien być.

Correct Image

Incorrect Image

+0

może mieć coś do zrobienia, gdy ustawisz go naCreate(). Jeśli obracasz telefon, układ jest niszczony i budowany ponownie, tak jak przy pierwszym otwarciu aplikacji. Ale wracając z innej aplikacji, tylko wywołania onResume() ...... może tutaj jest problem .... – Opiatefuchs

+0

Jaka jest określana szerokość? Możesz rozwiązać ten problem za pomocą 'android: adjustViewBounds =" true "' w ImageView. –

+0

@krislarson Dzięki, że rozwiązałeś problem. Nie wiedziałem, że taka opcja istniała. Zamiast używać słuchacza używam właśnie tej opcji i teraz zawsze działa. –

Odpowiedz

1

Wygląda to tak, jakby jesteś po prostu staramy się uzyskać prawidłowe proporcje na zasadzie ImageView. Jest to właściwość o nazwie adjustViewBounds. Jeśli masz określoną wartość layout_width taką jak match_parent lub dp, możesz określić wrap_content dla height_height i ustawić android:adjustViewBounds="true". Spowoduje to automatyczne dostosowanie współczynnika kształtu obrazu podczas pomiaru wysokości.