android getIntrinsicHeight和getIntrinsicWidth是什么意思?
嗨,我被Android Drawable类的两个方法弄糊涂了android getIntrinsicHeight和getIntrinsicWidth是什么意思?,android,drawable,Android,Drawable,嗨,我被Android Drawable类的两个方法弄糊涂了 getIntrinsicHeight() getIntrinsicWidth() api的定义是 “固有高度/宽度”一词是什么意思? 我的意思是它是实际图像的宽度吗?如果你想知道内在的含义,它只不过是一个对象拥有的实际属性。在我们的例子中,getIntrinsicWidth/Height只是指为您提供该可绘制图形的默认宽度/高度 这将返回未经任何修改就放入资源文件夹中的绘图表的确切大小 现在您必须知道getWidth或getHei
getIntrinsicHeight()
getIntrinsicWidth()
api的定义是
“固有高度/宽度”一词是什么意思?
我的意思是它是实际图像的宽度吗?如果你想知道内在的含义,它只不过是一个对象拥有的实际属性。在我们的例子中,
getIntrinsicWidth/Height
只是指为您提供该可绘制图形的默认宽度/高度
这将返回未经任何修改就放入资源文件夹中的绘图表的确切大小
现在您必须知道getWidth
或getHeight
将返回一个值,该值可能会根据您在XML布局中为ImageView
指定的宽度和高度而变化
假设您已在XML布局中将ImageView
的宽度和高度设置为100*100
,并且用作背景的可绘制图形的大小为200*200
现在
getIntrinsicWidth
必须返回200,而getWidth
必须返回100 在安卓系统中,绘图可以有多种类型,如颜色、位图、形状等
其中一些可绘制图形具有固有的高度,例如位图可绘制图形,它是图像的尺寸
诸如ColorDrawable(用于绘制纯色)之类的可绘制对象没有固有的高度。在本例中,getIntrinsicHeight/Width的值返回-1
即使drawable没有固有的高度/宽度,每个drawable也需要在渲染自身之前设置其边界(即在调用mydrawable.draw(canvas)之前)
如果使用可绘制图形作为视图的背景,则视图会在内部为您设置边界。但是,如果您在自己的onDraw中使用可绘制项,则需要通过setBounds显式设置边界 相关问题
如果您的图像是从internet下载的,.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个,并手动缩放),您必须小心提到的Android误称。谢谢,我明白了。但目前我正在从url下载图像(并将其加载到图像视图中)。如果我在浏览器中访问图像,其固有高度和宽度与原始图像不同,它比报告的图像大,但在上面的示例中,你说它们应该是相同的,也许你在下载时缩放了图像。我不确定这对下载的图像有多大作用,但至少对我的可绘制图像有效。错了。回答正确此处警告-intrinsicHeight因屏幕密度不同而不同,不能用作获取实际源图像尺寸的可靠度量-请参阅@MathHeadIncluds提供的链接当然,Android文档从未声明过这一点-导致全球开发者浪费数百万小时。错误。这给出了一个取决于屏幕密度的数字。请在此处更正答案