通过Drawable获取ImageView的Image真实宽高的两种方法

####在开发中,可以通过getDrawable().getBounds().height()与getDrawable().getIntrinsicHeight()两种方法来获得图片资源的真实宽高####

      ImageView在不同的分辨率的屏幕中获取的宽高值是不准确的,需要根据density缩放

         // 通过getBounds() 获得ImageView中Image的真实宽高,
				int dw = (int) (iv.getDrawable().getBounds().width());
				int dh = (int) (iv.getDrawable().getBounds().height());
				 
				Log.i(TAG, MainActivity.this.getResources().getDisplayMetrics().density+"drawable_X = "
				 + dw + ", drawable_Y = " + dh);
  
				
		// 通过getIntrinsic获得ImageView中Image的真实宽高,
				int inDw = iv.getDrawable().getIntrinsicWidth();
				int inDh = iv.getDrawable().getIntrinsicHeight();
				Log.i(TAG, MainActivity.this.getResources().getDisplayMetrics().density+
				"Intrinsic_drawable_X = " + dw + ", Intrinsic_drawable_Y = " + dh);

在1280*720分辨率中 ![这里写图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTYwMTA4MTEyMjUzMDk0?x-oss-process=image/format,png)

在1920*1080分辨率中
这里写图片描述

####正确的获取方式如下:####

public class MainActivity extends Activity {

	protected static final String TAG = "MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		final ImageView iv = (ImageView) findViewById(R.id.iv);
		iv.setImageResource(R.drawable.ic_launcher);

		// 等待ImageVivew加载完成
		iv.post(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub

				// ImageView的宽和高
				Log.i(TAG, "iv_W = " + iv.getWidth() + ", iv_H = " + iv.getHeight());
                
				// 屏幕密度
				float density = MainActivity.this.getResources().getDisplayMetrics().density;
				
				
				// 通过getIntrinsic 获得ImageView中Image的真实宽高,
				int dw = (int) (iv.getDrawable().getBounds().width()/density);
				int dh = (int) (iv.getDrawable().getBounds().height()/density);
				 
				Log.i(TAG, MainActivity.this.getResources().getDisplayMetrics().density
				+"drawable_X = " + dw + ", drawable_Y = " + dh);
  
				
				// 通过get获得ImageView中Image的真实宽高,
				int inDw = (int) (iv.getDrawable().getIntrinsicWidth()/density);
				int inDh = (int) (iv.getDrawable().getIntrinsicHeight()/density);
				Log.i(TAG, MainActivity.this.getResources().getDisplayMetrics().density
+"Intrinsic_drawable_X = " + dw + ", Intrinsic_drawable_Y = " + dh);
			}
		});
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值