美文网首页
Drawable之getIntrinsicWidth()和get

Drawable之getIntrinsicWidth()和get

作者: enchanted1107 | 来源:发表于2018-01-09 10:32 被阅读221次

    http://blog.sina.com.cn/s/blog_4c0706560102wk67.html

    Drawable之getIntrinsicWidth()和getIntrinsicHeight()

    Aoyousatuo Zhao

    http://blog.sina.com.cn/aoyousatuo

         在Android的开发中,凡是需要画图的地方大都离不开类Drawable。Android的官方文档中介绍这个类就是被设计用来表示可以被画的东西。A Drawable is a general abstraction for "something that can be drawn."

       细心的同学可能会发现这个类提供了这样两个方法:getIntrinsicWidth()和getIntrinsicHeight(),顾名思义他们是用来取得Drawable的固有的宽度和高度。那么问题就来了:我们有时候通过这两个方法取到的宽和高和实际的并不一样,这是怎么回事呢?

       笔者就遇到了同样的问题:我在assets中放了了一张png图片,它的分辨率是807x1211,然后通过Drawable.createFromStream(is, null)生成一个Drawable对象,最后利用上面的两个方法取drawable对象的宽高,居然结果是404x606。这是怎么回事呢?看笔者娓娓道来。

        再次强调一下,Drawable这个类是对所有可以画的东西的抽象,他可以是一张图片,也可以是实体的颜色,线等等,我们不能简单的认为它是一张图片。笔者经过实验发现,我的测试设备dpi是320,而android为了让同一个view在不同dpi的设备上大小尽量保持一致,建议度量单位采用dip/dp。所以我猜测上面两个方法的单位应该是dp,所以807px = 807 * 160 / 320 = 403.5 = 404dp ; 1211px = 1211 * 160 / 320 = 605.5 = 606dp, 所以各位同学现在明白了吧,getIntrinsicWidth()和getIntrinsicHeight()返回的宽高应该是dp为单位的哦。

    相关文章

      网友评论

          本文标题:Drawable之getIntrinsicWidth()和get

          本文链接:https://www.haomeiwen.com/subject/uorwnxtx.html