`
椰子面包
  • 浏览: 7346 次
  • 性别: 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不一定和图片原本的像素一致。

分享到:
评论

相关推荐

    Android选择照片或拍照后裁剪图片Demo

    在Android应用开发中,用户经常需要选择或拍摄照片并进行裁剪,以便适应特定的显示需求,例如设置头像。...通过学习和理解这个Demo,开发者可以更好地处理与图片相关的任务,为用户提供更优质的服务。

    Android-绚丽的自定义圆角图片简单实用

    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth()...

    android 图片转 圆形和圆角矩形

    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth()...

    Android圆形图片

    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth()...

    图片圆形化

    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth...

    Android Drawable Bitmap 相互转换

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas....

    android ui

    Android UI是Android应用程序开发中的重要组成部分,涉及...理解并熟练掌握这些基本操作,对于优化应用程序的性能和用户体验至关重要。同时,资源的有效管理和使用,以及对高级UI特效的实现,也是提升应用品质的关键。

    自定义圆角图片Demo

    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), ...

    viewoverlay

    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); overlay.add(drawable); ``` 在上面的代码中,我们首先获取了`View`的`Overlay`实例,然后创建了一个`BitmapDrawable`并...

    圆角头像需要的两个文件

    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth()...

    圆形ImageView

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas....

    Drawable Bitmap之间的转化

    `Bitmap`则是一种具体的图像格式,它表示一个像素矩阵,可以理解为一张像素图片。`Bitmap`主要用于存储和显示图像数据,比如加载图片到ImageView控件中显示。由于`Bitmap`直接存储像素数据,因此它在显示速度和图像...

    Android 圆形头像实现

    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth()...

    Android App开发中将View或Drawable转为Bitmap的方法

    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; } ``` 这个方法首先检查Drawable是否已经是BitmapDrawable,如果是,则直接...

    Android-TextView-富文本-html图片显示.rar

    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); drawable = d; textView.invalidate(); } @Override public void onBitmapFailed(Exception e, Drawable errorDrawable) {} @Override...

    Android UI之ImageView实现图片旋转和缩放

    matrix.setRotate(rotationDegrees, imageView.getDrawable().getIntrinsicWidth() / 2, imageView.getDrawable().getIntrinsicHeight() / 2); Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable())....

    textView加载带图片Html标签

    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); return drawable; } ``` 通过这种方式,我们可以确保图片在TextView中按照其原始比例缩放,同时适应TextView的宽度。...

    Android 自定义圆形头像

    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth()...

    圆形image view

    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth()...

    android头像圆角处理

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas....

Global site tag (gtag.js) - Google Analytics