我的修复代码ImageView
:
private void fixImageWidth() {
int parentHeight = getHeight();
if (parentHeight == 0 || getParent() == null)
return;
Drawable drawable = image.getDrawable();
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) image.getLayoutParams();
if (drawable != null) {
int height = drawable.getIntrinsicHeight();
int width = drawable.getIntrinsicWidth();
lp.width = (int) ((float)(parentHeight - lp.topMargin * 2) / height * width);
} else {
lp.width = LayoutParams.WRAP_CONTENT;
}
image.requestLayout();
}
但有时实际上图像边界没有改变。您可以在下面看到该对象的 HierarchyViewer 属性:
编辑:
经过大量调试后,我确定,有时 requestLayout 不会重新测量图像视图。这是怎么发生的?
编辑:
我找到了解决方案,但仍然不知道原因。解决方案如下:
image.post(new Runnable() {
@Override
public void run() {
image.requestLayout();
}
});
有任何想法吗?