在OnLayoutChangeListener中更改视图的大小

时间:2015-09-18 12:44:14

标签: android android-recyclerview android-viewholder

我使用recyclerview实现了一个图库,并且我已经向viewholder添加了一个onLayoutChangeListener,这样一旦计算了布局,就会更改imageview的高度以匹配图像的方面比。它在第一次打开活动,旋转设备或解锁屏幕时工作正常,但是当从另一个活动回来时它不起作用。执行该方法,但imageview不会更改。有什么可能导致这种情况的想法吗?

        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

1 个答案:

答案 0 :(得分:1)

看起来您只是想在ImageView上获得正确的宽高比。

ImageView有一个名为adjustViewBounds的属性。如果您具有特定的layout_width,例如match_parentdp值,则可以为layout_height指定wrap_content并设置android:adjustViewBounds="true"。这将导致ImageView在测量高度时自动尊重图像的纵横比。