`
jianweicao
  • 浏览: 117051 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于android Drawable对象 getIntrinsicHeight获取高度变化的问题

阅读更多
		drawable = getResources().getDrawable(R.drawable.xxx);
		System.out.println("Height:"+drawable.getIntrinsicHeight());
		System.out.println("Width:"+drawable.getIntrinsicWidth());

   如果是单组图片,获取到的图片资源大小或许和你实际图片资源的大小有区别,可能会大,可能会小。

原因处在哪里?像素密度(DPI)!

至于DPI如何计算,那就请度娘谷哥吧

四种屏幕尺寸分类:: small, normal, large, and xlarge
四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)

四种屏幕的DPI:ldpi120dpimdpi160dpihdpi240dpixhdpi320dpi

四种屏幕对应density:0.75,1,1.5,2

四种图片资源文件夹:drawable-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi

 

基本资料搞清了,回到正题。

现在算算你的测试机,或者模拟器的DPI是多少吧,或许和上面四个值有差异,那就找比较靠近的(至于为什么,请看看这片文章 http://zhangkun716717-126-com.iteye.com/blog/1772696),或者运行下面的代码:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
System.out.println("dm.density:"+dm.density);
System.out.println("dm.densityDpi:"+dm.densityDpi);

 算出了测试机的DPI,记录为D_PHONE。好在看看你把你的测试图片放在了哪个文件夹下,根据上文资料找到对应的dpi,记录为D_FOLDER

你实际图片的高或者宽记录为IMAGE_SIZE

计算一下  x = IMAGE_SIZE * (D_PHONE/D_FOLDER)

好了x的结构是不是和最初程序里打印出的drawable的大小一样了

很明显了,与你你测试机像素密度对应的文件夹里没找到图片,他去另外一个像素密度的文件夹里找到了,相应结果的就是图片被放大(或者缩小)了。

总结一下:

简单的说:你没有做屏幕适配工作。根据目前的手机来说至少要做两组图片 分别为放在drawable-hdpi,drawable-xhdpi。大公司的产品就请把另外两组图片也做了吧,美工辛苦一点。如果只有一组图片又想获取到图片实际像素值,可以根据这个计算一下。

 

提醒一下,imageview在布局文件里用wap_content设置的高和宽,在没有其他控件挤压的情况下宽和高也是由对应drawable的宽高决定的,可以自己查源码。

 

再有不清楚的请留言。

1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics