嗨,我对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的确切大小,而不进行任何修改.
现在您必须知道getWidth或getHeight将返回一个值,该值可能会根据您ImageView在XML布局中指定的宽度和高度而有所不同.
假设您已经 在XML布局中提供了ImageViewas 的宽度和高度,100*100并且您用作背景的drawable的大小为200*200.
现在getIntrinsicWidth必须返回200而getWidth必须返回100.
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,并手动缩放),你必须要注意提到的安装错误.
| 归档时间: |
|
| 查看次数: |
32687 次 |
| 最近记录: |