首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >android getIntrinsicHeight和getIntrinsicWidth是什么意思?

android getIntrinsicHeight和getIntrinsicWidth是什么意思?
EN

Stack Overflow用户
提问于 2012-12-07 12:26:08
回答 2查看 38.8K关注 0票数 69

嗨,我被Android Drawable类中的两个方法搞糊涂了

代码语言:javascript
复制
getIntrinsicHeight()
getIntrinsicWidth()

接口定义为http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight()

“固有高度/宽度”这个词是什么意思?我的意思是它是实际图像的宽度吗?

EN

回答 2

Stack Overflow用户

发布于 2015-01-27 05:35:28

相关问题here on stackoverflow

如果你的图片是从互联网上下载的,.getIntrinsicWidth().getIntrinsicHeight()确实会分别给你图片的“真实”宽度和高度。

它被称为内在的,因为它只依赖于图像,而不依赖于其他东西(比如你的手机)。

遗憾的是,你得到的并不是在所有情况下都是固有的--不幸的是,它依赖于图像以外的其他东西。

这就是你得到一个错误的(即非内在的)结果的地方。假设您使用的是默认的启动器图标,然后

代码语言:javascript
复制
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个版本,并手动缩放它们),那么你必须注意前面提到的androidal的误用。

票数 13
EN

Stack Overflow用户

发布于 2013-05-14 08:09:12

在android中,可绘制的图形可以有多种类型,如颜色、位图、形状等。

其中一些可绘制图形具有固有的高度,例如BitmapDrawable,它是图像的尺寸。

诸如ColorDrawable (用于绘制纯色)之类的可绘制图形没有固有的高度。在这种情况下,getIntrinsicHeight/Width的值返回-1。

即使可绘制图形没有固有的高度/宽度,每个可绘制图形在渲染自身之前都需要设置它们的边界(即在调用mydrawable.draw(Canvas)之前)

如果使用可绘制的作为视图的背景,则该视图将在内部为您设置边界。但是,如果您在自己的onDraw中使用可绘制内容,则需要通过setBounds显式设置界限。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13756910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档