如何获得android.widget.ImageView的宽度和高度?

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

我有一个默认的高度和宽度的图像视图,图像存储在数据库中,我想根据ImageView的高度宽度缩放图像。 因为我不希望它给出默认值,因为当我改变它的高度和宽度时,我也必须在代码中进行更改。

我想获得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()方法中添加图像缩放工作。

我只是设置这个属性,现在Android操作系统正在照顾每一件事情。

机器人:adjustViewBounds = “真”

在你已经种植了ImageView:D的layout.xml中使用它

我可以通过drawable来获得图像的宽度和高度;

 int width = imgView.getDrawable().getIntrinsicWidth(); int height = imgView.getDrawable().getIntrinsicHeight(); 

ImageView的维数为0的原因是因为当您查询它们时,视图仍然没有执行布局和测量步骤。 你只是告诉视图如何在布局中“performance”,但是仍然没有计算出每个视图的放置位置。

你如何决定给图像视图的大小? 你不能简单地使用原生实现的缩放选项之一吗?

张贴到UI线程为我工作。

 final ImageView iv = (ImageView)findViewById(R.id.scaled_image); iv.post(new Runnable() { @Override public void run() { int width = iv.getMeasuredWidth(); int height = iv.getMeasuredHeight(); } }); 

我想你可以让Android操作系统为你照顾这个。 将ImageView的缩放types设置为fitXY ,并将其大小显示为适合视图的当前大小。

 <ImageView android:layout_width="90px" android:layout_height="60px" android:scaleType="fitXY" /> 

你的xml文件:

  <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/image" android:scaleType="fitXY" android:adjustViewBounds="true"/> 

你的java文件:

 ImageView imageView = (ImageView)findViewById(R.id.imageView); int width = imageView.getDrawable().getIntrinsicWidth(); int height = imageView.getDrawable().getIntrinsicHeight(); 

如果您已经创build了多个图像 ,请尝试下面的图像

/ / 初始化您的图像数组

 private ImageView myImages[] = new ImageView[your_array_length]; 

// 以编程方式创build并添加到父视图

  for (int i = 0; i < your_array_length; i++) { myImages[i] = new ImageView(this); myImages[i].setId(i + 1); myImages[i].setBackgroundResource(your_array[i]); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( frontWidth[i], frontHeight[i]); ((MarginLayoutParams) params).setMargins(frontX_axis[i], frontY_axis[i], 0, 0); myImages[i].setAdjustViewBounds(true); myImages[i].setLayoutParams(params); if (getIntent() != null && i != your_array,length) { final int j = i; myImages[j].getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { myImages[j].getViewTreeObserver().removeOnPreDrawListener(this); finalHeight = myImages[j].getMeasuredHeight(); finalWidth = myImages[j].getMeasuredWidth(); your_textview.setText("Height: " + finalHeight + " Width: " + finalWidth); return true; } }); } your_parent_layout.addView(myImages[i], params); } 

// 而已。 快乐的编码。

最简单的方法是在Activity的onWindowFocusChanged方法中获取ImageView的宽度和高度

  @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); height = mImageView.getHeight(); width = mImageView.getWidth(); } 

我的朋友这是你没有得到高度的图像存储在db.but你正在获得视图的高度。为了获得图像的高度,你必须创build从数据库的图像位图,而不是你可以获取图像的高度和宽度