如何在ImageView中获取Drawable的尺寸?

在ImageView中检索Drawable的尺寸的最佳方法是什么?

我的ImageView有一个Init-Method我创buildImageView:

private void init() { coverImg = new ImageView(context); coverImg.setScaleType(ScaleType.FIT_START); coverImg.setImageDrawable(getResources().getDrawable(R.drawable.store_blind_cover)); addView(coverImg); } 

在布局或测量过程中的某一时刻,我需要Drawable的确切尺寸来调整我周围的组件的其余部分。

coverImg.getHeight()coverImg.getMeasuredHeight()不返回我需要的结果,如果我使用coverImg.getDrawable().getBounds()我得到的尺寸之前,由ImageView缩放。

谢谢你的帮助!

刚试过这个,它对我有用:

 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() { // Remove after the first run so it doesn't fire forever iv.getViewTreeObserver().removeOnPreDrawListener(this); finalHeight = iv.getMeasuredHeight(); finalWidth = iv.getMeasuredWidth(); tv.setText("Height: " + finalHeight + " Width: " + finalWidth); return true; } }); 

ViewTreeObserver可以让你在绘制之前监视布局(也就是说,所有的东西都已经被测量过了),从这里你可以从ImageView获得缩放的测量结果。

在drawable上调用getIntrinsicHeight和getIntrinsicWidth。

 public int getIntrinsicHeight () 

因为:API级别1

返回底层绘制对象的内在高度。 如果没有固有颜色,则返回-1。

 public int getIntrinsicWidth () 

因为:API级别1

返回底层绘制对象的内部宽度。

如果没有固有宽度,则返回-1。

http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight();

这是原始绘图的大小。 我想这是你想要的。

获取可绘制维度的最可靠和最强大的方法是使用BitmapFactory来解码Bitmap。 它非常灵活 – 它可以解码来自可绘制资源,文件或其他不同来源的图像。

以下是如何使用BitmapFactory从可绘制资源中获取维度:

 BitmapFactory.Options o = new BitmapFactory.Options(); o.inTargetDensity = DisplayMetrics.DENSITY_DEFAULT; Bitmap bmp = BitmapFactory.decodeResource(activity.getResources(), R.drawable.sample_image, o); int w = bmp.getWidth(); int h = bmp.getHeight(); 

如果在res下使用多个密度可绘制文件夹,请小心,并确保在BitmapFactory.Options中指定了inTargetDensity以获得所需的可绘制密度。

这解决了我的问题。 它解码图像边界的大小,而不真正加载整个图像。

 BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.img , o); int w = o.outWidth; int h = o.outHeight; 

有效的方法来获得可绘制的 宽度高度

 Drawable drawable = getResources().getDrawable(R.drawable.ic_home); int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Log.i("Drawable dimension : WH", width+"-"+height); 

希望这会帮助你。