2015-09-18 35 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()を設定した場所で何かする可能性があります。あなたがあなたの携帯電話を回転させているならば、あなたは最初にアプリを開いているかのように、レイアウトが破壊され、再びビルドされます。しかし、別のアプリから戻ってきて、onResume()を呼び出すだけで......ここに問題があります。 – Opiatefuchs

+0

幅はどのように決められていますか?これをImageViewで 'android:adjustViewBounds =" true "'で解決できるかもしれません。 –

+0

@krislarsonありがとう、それは問題を解決しました。そのオプションが存在するかどうかはわかりませんでした。リスナーを使用する代わりに、私はそのオプションを使用するだけで、今は常に機能します。 –

答えて

1

あなただけImageView上の適切なアスペクト比を取得しようとしているかのように見えます。

ImageViewには、adjustViewBoundsというプロパティがあります。 match_parentまたはdpのような特定のlayout_widthがある場合は、layout_heightにwrap_contentを指定し、を設定します。これにより、高さを測定するときにImageViewが画像のアスペクト比を自動的に尊重します。

関連する問題