如何在android中获得图像视图的宽度和高度?

如何在android中获得图像视图的宽度和高度?,android,imageview,Android,Imageview,在我的代码中,我的XML布局中有一个图像视图,我在代码中不断更改此视图的源图像。现在我想知道每次生成的图像的宽度和高度 我尝试使用getWidth(),getHeight(),getMeasuredWidth(),和getMeasuredHeight(),但它们都返回0 如何获取此信息?您引用图像对象的方式是错误的。这就是为什么你总是得到零分。首先从imageview创建位图对象,并从中获取宽度和高度 当我从cam拍摄一张照片时,我会做以下事情,它就像一个符咒 Bitmap image2 = (

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

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


如何获取此信息?

您引用图像对象的方式是错误的。这就是为什么你总是得到零分。首先从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));
希望对你有帮助

试试这个

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

首先,您必须将图像转换为可变位图,并尝试获取图像的宽度和高度,这将主要解决您的问题

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

Rbitmap.getWidth();
Rbitmap.getheight();

在ImageView上调用
getWidth()
getHeight()
的位置?如果在“活动”中从
onCreate()
调用,它将不起作用。您需要等待活动窗口连接,然后在ImageView上调用
getWidth()和getHeight()
。您可以尝试从活动的
onWindowFocusChanged()
方法调用
getWidth()和getHeight()

@Override
public void onWindowFocusChanged(boolean hasFocus){
    int width=imageView.getWidth();
    int height=imageView.getHeight();
}
试试这个代码

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;
    }
});
它真的起作用了…

试试这个解决方案:

Bitmap bitmap = ((BitmapDrawable)imageView.getBackground()).getBitmap();
int width = bitmap.getWidth();
int height = bitmap.getHeight();

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


谢谢。这段代码也可以工作,但我想Veer提供的解决方案会更合适。在第一次加载图像时,它会返回零,然后每次都返回正确的大小。如何在片段中执行此操作?onWindowFocusChanged只在API18及以上上工作,这不是最好的方法。。。但是,我已经在xml中将imageview的高度和宽度设置为300dp,但是当我运行您的方法时,我得到的高度和宽度输出为450dp。请帮助问题是如何获取图像视图的高度和宽度而不是位图。如果从url获取图像,这似乎没有用。
int height = imageView.getDrawable().getIntrinsicHeight();
int width = imageView.getDrawable().getIntrinsicWidth();