android getIntrinsicHeight和getIntrinsicWidth是什么意思?

use*_*965 59 android drawable

嗨,我对Android Drawable类的两种方法感到困惑

getIntrinsicHeight()
getIntrinsicWidth()
Run Code Online (Sandbox Code Playgroud)

api定义说 http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight()

内在高度/宽度是什么意思?我的意思是它是实际图像的宽度?

And*_*lva 126

如果你想知道内在的意义,它只不过是一个物体拥有的实际属性.在我们的例子中,getIntrinsicWidth/Height只是意味着为您提供该drawable的默认宽度/高度.

这将返回您放在资源文件夹中的drawable的确切大小,而不进行任何修改.

现在您必须知道getWidthgetHeight将返回一个值,该值可能会根据您ImageView在XML布局中指定的宽度和高度而有所不同.

假设您已经 在XML布局中提供了ImageViewas 的宽度和高度,100*100并且您用作背景的drawable的大小为200*200.

现在getIntrinsicWidth必须返回200而getWidth必须返回100.

  • 错误.正确答案http://stackoverflow.com/questions/6536418/android-why-are-the-width-height-of-the-drawable-in-imageview-wrong (10认同)
  • 警告 - intrinsicHeight根据屏幕密度而有所不同,不能用作获取实际源图像尺寸的可靠度量 - 请参阅@mathheadinclouds提供的链接当然,Android文档从未说明这一点 - 导致全球开发人员浪费数百万小时. (3认同)

mat*_*uds 11

stackoverflow上的相关问题.

如果您的图像是从互联网上下载的,.getIntrinsicWidth()并且.getIntrinsicHeight()确实分别给出了图像的"真实"宽度和高度.

它被称为内在的,因为它仅取决于图像而不是其他任何东西(例如您的手机).

唉,你得到的并不是在所有情况下都是内在的 - 不幸的是,它依赖于图像以外的东西.

这是你得到错误(即非内在)结果的地方.假设您正在使用默认启动器图标

Log.i("", "ic_launcher intrinsic width " + getResources().getDrawable(R.drawable.ic_launcher).getIntrinsicWidth());
Run Code Online (Sandbox Code Playgroud)

会告诉你启动器图标的宽度(以像素为单位).但是哪一个呢? - 你有几个,一个在drawable-xhdpi文件夹,一个在drawable-hdpi文件夹,等等.好吧,如果你的设备是,例如,xhdpi,它给你96,这确实是版本的像素宽度驻留在drawable-xhdpi文件夹中的启动器图标.现在,删除drawable-xhdpi文件夹中的图标,然后再次运行(仍然使用xhdpi设备(真实或模拟)).将使用的图像来自drawable-hdpi文件夹,因为它与xhdpi版本"最接近".该图标的像素宽度为72.但是上面的代码仍然会给你96!

这显然不是"内在的"(在正确的意义上),因为它不仅仅依赖于所使用的图像.

因此,如果你像我一样懒惰,因此不会生成每个资源图标/图像的4个版本(但只使用1或2,并手动缩放),你必须要注意提到的安装错误.