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

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

Java代码  收藏代码
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:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi
四种屏幕对应density:0.75,1,1.5,2
四种图片资源文件夹:drawable-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi

基本资料搞清了,回到正题。
现在算算你的测试机,或者模拟器的DPI是多少吧,或许和上面四个值有差异,那就找比较靠近的(至于为什么,请看看这片文章 http://zhangkun716717-126-com.iteye.com/blog/1772696),或者运行下面的代码:
Java代码  收藏代码
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的宽高决定的,可以自己查源码。