私は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()を設定した場所で何かする可能性があります。あなたがあなたの携帯電話を回転させているならば、あなたは最初にアプリを開いているかのように、レイアウトが破壊され、再びビルドされます。しかし、別のアプリから戻ってきて、onResume()を呼び出すだけで......ここに問題があります。 – Opiatefuchs
幅はどのように決められていますか?これをImageViewで 'android:adjustViewBounds =" true "'で解決できるかもしれません。 –
@krislarsonありがとう、それは問題を解決しました。そのオプションが存在するかどうかはわかりませんでした。リスナーを使用する代わりに、私はそのオプションを使用するだけで、今は常に機能します。 –