你好,我对Android Drawable类中的两种方法感到困惑。
getIntrinsicHeight()
getIntrinsicWidth()
API的定义表示:http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight()
“本质高度/宽度”这个词是什么意思?我的意思是它是否代表了实际图像的宽度?
你好,我对Android Drawable类中的两种方法感到困惑。
getIntrinsicHeight()
getIntrinsicWidth()
API的定义表示:http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight()
“本质高度/宽度”这个词是什么意思?我的意思是它是否代表了实际图像的宽度?
如果您下载的图片来自互联网,.getIntrinsicWidth()
和.getIntrinsicHeight()
确实可以分别给出图像的“真实”宽度和高度。
它被称为内在尺寸,因为它仅取决于图像本身,而不取决于其他任何因素(例如您的手机)。
但遗憾的是,在某些情况下,您得到的结果并不是所有情况下都是内在的 - 它确实与除图像之外的其他事物有关。
以下情况会导致您得到错误的(非内在的)结果。比方说,如果您使用的是默认的启动器图标,则
Log.i("", "ic_launcher intrinsic width " + getResources().getDrawable(R.drawable.ic_launcher).getIntrinsicWidth());
该代码将告诉您启动器图标的宽度(以像素为单位)。但是哪一个? - 您有几个,一个在drawable-xhdpi文件夹中,一个在drawable-hdpi文件夹中等等。如果您的设备是xhdpi,它会给您96,这确实是驻留在drawable-xhdpi文件夹中的启动器图标版本的像素宽度。现在,删除drawable-xhdpi文件夹中的图标,然后再次运行(仍然使用xhdpi设备(真实或模拟))。将使用来自drawable-hdpi文件夹的图像,因为那是最接近xhdpi版本的图像。该图标的像素宽度为72。但是上面的代码仍将给出96!!!
显然,这不是“本质”(按照单词的正常意义),因为它不仅取决于所使用的图像。
因此,如果您和我一样懒惰,因此没有生成每个资源图标/图像的4个版本(而是只使用1或2个,并手动缩放它们),那么您必须注意所提到的安卓误称。