若一个 ImageView 控件设置了 adjustViewBounds 属性为 true,同时该控件高度设置为 wrap_content,当该 ImageView 控件的图片高度小于控件宽度时,会出现显示不正常的 Bug。
解决这个问题的方法是通过代码手动设置 ImageView 控件的高度,即在 ImageView 控件初始化后,通过代码获取到图片的实际高度,然后设置 ImageView 控件的高度为该图片的实际高度。具体代码如下:
imageView.post(new Runnable() {
@Override
public void run() {
// 获取 ImageView 控件加载的图片
Drawable drawable = imageView.getDrawable();
if (drawable == null) {
return;
}
// 获取图片实际宽度
int drawableWidth = drawable.getIntrinsicWidth();
int drawableHeight = drawable.getIntrinsicHeight();
// 计算 ImageView 控件应该设置的高度
int imageViewHeight = (int) (imageView.getWidth() * 1.0f / drawableWidth * drawableHeight);
// 设置 ImageView 控件的高度
imageView.getLayoutParams().height = imageViewHeight;
imageView.requestLayout();
}
});