`
椰子面包
  • 浏览: 7182 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

BitmapDrawable.getIntrinsicWidth()和getIntrinsicHeight()理解

阅读更多

       在使用TextView的android:drawableLeft或者android:drawableRight属性的时候,突然想到一个问题:同样的图片在不同分辨率的机器上所占的空间是一样的吗?

       出乎意料,居然一样!说明不同的像素密度的机器上图片的像素是不一样的。遂看源码,过程比较啰嗦。直接贴出结论吧。

       一般使用的都是BitmapDrawable,其尺寸由getIntrinsicWidth和getIntrinsicHeight给出。以IntrinsicWidth为例,它的计算公式为

    1、             ((size * tdensity) + (sdensity >> 1)) / sdensity 

 size代表bitmap的width ,tdensity表示目标像素密度,sdensity 是机器像素密度,放在res文件夹下的图片都是tdensity=sdensity。也就是说同样的图片在不同像素密度的情况下size是不一样的这是因为Resources在解释图片的时候做了转换(具体看源码):

    2、               size = width * sdensity/indensity  

width为图片的真实的宽度,indensity由图片所在的文件夹决定(例如在drawable-mdpi下的 indensity=160)。

       举个例子,图片a的真实像素为48*48,假如a放在drawable-hdpi下,在像素密度为240的机器中生成的BitmapDrawable的IntrinsicWidth和IntrinsicHeight为48*48;在像素密度320的机器中为72*72,在像素密度160的机器中为32*32。在屏幕上占的空间都一样为24dp * 24dp。

 

       对于不在res资源文件夹下的图片,生成的Bitmap像素跟原图片的像素一样;但是通过此Bitmap生成的

BitmapDrawable,如果没有指定Resources的话tdensity默认为160(具体rom可能有偏差);由公式1得出的IntrinsicWidth和IntrinsicHeight不一定和图片原本的像素一致。

分享到:
评论

相关推荐

    Bitmap,BitmapDrawable,Drawable.doc

    自己找了很久网上资料,然后归纳的,所以放心下载,比较实用

    图片比例缩放以及bitMap转BitmapDrawable

    NULL 博文链接:https://wang-peng1.iteye.com/blog/669532

    Android学习系列教程实例.pdf

    4.1. ListView 和 Adapter 的关系 ......... 112 4.1.1. 原理分析 .............................. 112 4.1.2. 示例分析: .......................... 115 4.1.3. 运行效果 .............................. 117 4.2...

    Android 毛玻璃工具类

    bg_bitmap = ((BitmapDrawable) oldbg).getBitmap(); Bitmap blur_bitmap = com.example.administrator.text2.util.EasyBlur.with(MainActivity.this) .bitmap(bg_bitmap) //要模糊的图片 .radius(8)//模糊半径 ...

    ImageFactory:ImageFactory 很像 BitmapFactory 但如果解码的图像是动画 GIF 或 BitmapDrawable 如果不是则返回 GifDrawable

    ##描述ImageFactory 与 BitmapFactory 非常相似,但如果解码的图像是动画 GIF 或 BitmapDrawable,则返回 GifDrawable 如果不是。 取决于 最低 API 级别 8 将此添加到 build.gradle 依赖项,将 xxx 替换为版本号...

    ProminentColor:Android库获取bitmapdrawable的平均突出颜色

    显色 Android库获取位图/可绘制对象的平均/突出颜色 如果您喜欢该库,请在上我们 Gradle 步骤1.将JitPack存储库添加到您的构建文件中 将其添加到存储库末尾的root build.gradle中: allprojects { ...

    txt、BitmapDrawable

    txt读写,sqlite读写,把图片以二进制存储到sqlite和txt,再转换为图片并设置为背景图片

    Android RecyclerView实现下拉列表功能

    现在市面上的很多的应用,都带有下拉列表的功能,将所有选项都放在下拉列表中,当用户点击选择的时候,弹出所有的...import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.o

    android Palette和RoundedBitmapDrawable的实践

    android Palette和RoundedBitmapDrawable的实践

    Android二维码扫描

    import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer....

    Android Bitmap和Drawable相互转换的简单代码

    很多开发者表示,不知道Android的Drawable和Bitmap之间如何相关转换。下面Android123给大家两种比较简单高效的方法。  一、Bitmap转Drawable 代码如下: Bitmap bm=xxx; //xxx根据你的情况获取  BitmapDrawable bd...

    Android popupwindow简单使用方法介绍

    import android.graphics.drawable.BitmapDrawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android...

    Android实现图片叠加功能

    前几天工作碰到这样一个需求,将二维码与一张海报叠加,并将合成后的海报分享到微信。由于经验不足,在实现功能的过程中,碰到了这样或那样的问题,我就来分享...Bitmapfg = ((BitmapDrawable) getResources().getDrawa

    全国城市检索

    import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import ...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    第8章 理解Window和WindowManager 294 8.1 Window和WindowManager 294 8.2 Window的内部机制 297 8.2.1 Window的添加过程 298 8.2.2 Window的删除过程 301 8.2.3 Window的更新过程 303 8.3 Window的创建过程 ...

    Android 图片缩放与旋转的实现详解

    本文使用Matrix实现Android实现图片缩放与旋转。...import android.app.Activity;import android.graphics....import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.ViewGroup.

    Android学习教程之分类侧滑菜单(5)

    本文实例为大家分享了Android分类侧滑菜单的制作方法,供大家参考,具体内容如下 classificmenuActivity.java代码: ...import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.

    Android侧边栏滑动切换的view效果

    废话不多说了,直接给大家...import android.graphics.drawable.BitmapDrawable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class SideBar extends View

    Android实现点赞动画(27)

    本文实例为大家分享了Android使用入门第二十七篇点赞动画的具体代码...import android.graphics.drawable.BitmapDrawable; import android.support.v4.content.res.ResourcesCompat; import android.support.v7.app.App

    解决Android快速滑动时图片一闪一闪问题

    快速滑动图片一闪一闪的问题,图片加载等处理在这里不介绍,主要就是介绍下...import android.graphics.drawable.BitmapDrawable; import android.view.LayoutInflater; import android.view.View; import android.vie

Global site tag (gtag.js) - Google Analytics