17

在我的代码Image View中,我的 XML 布局中有一个,并且我在我的代码中不断更改源图像。现在我想知道每次生成图像的宽度和高度。

我尝试使用getWidth(),getHeight(), getMeasuredWidth(),getMeasuredHeight(),但它们都返回 0。

我怎样才能得到这个?

4

7 回答 7

43

你在哪里打电话getWidth()getHeight()在 ImageView 上?如果您从onCreate()活动中调用,它将不起作用。您需要等待活动窗口附加,然后调用getWidth() and getHeight()ImageView。您可以尝试getWidth() and getHeight()onWindowFocusChanged()您的活动方法调用。

@Override
public void onWindowFocusChanged(boolean hasFocus){
    int width=imageView.getWidth();
    int height=imageView.getHeight();
}
于 2012-05-02T10:47:46.923 回答
14

试试这个

 ImageView iv=(ImageView)findViewById(R.id.image);
 ViewTreeObserver vto = iv.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        public boolean onPreDraw() {
           finalHeight = iv.getMeasuredHeight();
           finalWidth = iv.getMeasuredWidth();
           Log.e("hilength","Height: " + finalHeight + " Width: " + finalWidth);
            return true;
        }
    });
于 2012-05-02T10:37:49.353 回答
5

如果您将 ImageView 设置为可绘制对象,并且 ImageView 的高度和宽度类型为 WRAP_CONTENT,那么即使您从onCreate()

int height = imageView.getDrawable().getIntrinsicHeight();
int width = imageView.getDrawable().getIntrinsicWidth();
于 2016-08-17T08:04:28.500 回答
4

试试这个代码

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;
    }
});

它真的有效...

于 2015-03-12T10:22:11.797 回答
1

引用图像对象的方式是错误的。这就是为什么你总是得到零。首先从 imageview 创建一个位图对象并从中获取宽度和高度。

当从 cam 拍摄图像时,我会执行以下操作,它就像一个魅力。

Bitmap image2 = (Bitmap) data1.getExtras().get("data");
double width = Double.valueOf(image2.getWidth());
Log.v("WIDTH", String.valueOf(width));
double height = Double.valueOf(image2.getHeight());
Log.v("height", String.valueOf(height));

希望它对你有帮助。

于 2012-05-02T10:37:41.827 回答
1

首先,您必须将图像转换为 mutablebitmap 并尝试获取图像的宽度和高度,大多数情况下这将解决您的问题..

    Bitmap Rbitmap = Bitmap.createBitmap(bitmap).copy(
                    Config.ARGB_4444, true);

Rbitmap.getWidth();
Rbitmap.getheight();
于 2012-05-02T10:40:23.303 回答
1

试试这个解决方案:

Bitmap bitmap = ((BitmapDrawable)imageView.getBackground()).getBitmap();
int width = bitmap.getWidth();
int height = bitmap.getHeight();
于 2016-08-02T13:19:38.573 回答