0

修正するための私のコード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 プロパティを示します。

HierarchyView プロパティ

編集:

私が決定したデバッグのためにたくさんした後、requestLayoutが画像ビューを再測定しないことがあります。これはどのように起こりますか?

編集:

解決策を見つけましたが、まだ理由がわかりません。解決策は次のとおりです。

    image.post(new Runnable() {
        @Override
        public void run() {
            image.requestLayout();
        }
    });

何か案は?

4

1 に答える 1

2

getWidth() と getLayoutParams().width は別のものだからです。1 つ目はビューに関連し、2 つ目は親へのレイアウト リクエストです。親がリクエストに一致しない場合、ビューは異なる幅でレイアウトされる可能性があります。この場合、レイアウトの高さで MATCH_PARENT を要求しました。ImageView のデフォルトの scaleType は FIT_CENTER であるため、コンテンツの縦横比が維持され、幅が変更されます。

于 2013-07-23T15:00:33.847 に答える