1. ホーム
  2. アンドロイド

[解決済み】android.widget.ImageViewの幅と高さを取得する方法とは?

2022-04-16 03:34:11

質問

╔══════════════════════════════════════════════╗   ^
║ ImageView    ╔══════════════╗                ║   |
║              ║              ║                ║   |
║              ║ Actual image ║                ║   |
║              ║              ║                ║   |60px height of ImageView
║              ║              ║                ║   |
║              ║              ║                ║   |
║              ╚══════════════╝                ║   |
╚══════════════════════════════════════════════╝   
<------------------------------------------------>
                   90px width of ImageView

私はいくつかのデフォルトの高さと幅を持つ画像ビューを持って、画像は、DBに格納されており、私はイメージビューの高さと幅に応じて画像を拡大縮小したいです。私はそれがデフォルト値を与えたいと思わないので、私がそれの高さと幅を変更するたびに、私はまた、コードでそれを変更する必要があります。

ImageViewの高さと幅を取得しようとしていますが、両方とも0が返されます。

int height = ((ImageView) v.findViewById(R.id.img_ItemView)).getHeight();

これは、デフォルトの高さと幅を持っているにもかかわらず、私を0に返します。

解決方法は?

に関する私の回答 この質問 が参考になるかもしれません。

int finalHeight, finalWidth;
final ImageView iv = (ImageView)findViewById(R.id.scaled_image);
final TextView tv = (TextView)findViewById(R.id.size_label);
ViewTreeObserver vto = iv.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    public boolean onPreDraw() {
        iv.getViewTreeObserver().removeOnPreDrawListener(this);
        finalHeight = iv.getMeasuredHeight();
        finalWidth = iv.getMeasuredWidth();
        tv.setText("Height: " + finalHeight + " Width: " + finalWidth);
        return true;
    }
});

その後、onPreDraw() メソッド内で画像のスケーリング作業を追加することができます。